packages feed

vulkan 3.6.12 → 3.6.13

raw patch · 223 files changed

+39471/−33375 lines, 223 files

Files

changelog.md view
@@ -2,6 +2,9 @@  ## WIP +## [3.6.13] - 2020-11-09+  - Bump API version to v1.2.160+ ## [3.6.12] - 2020-11-03    - Bump API version to v1.2.159
package.yaml view
@@ -1,5 +1,5 @@ name: vulkan-version: "3.6.12"+version: "3.6.13" synopsis: Bindings to the Vulkan graphics API. category: Graphics maintainer: Joe Hermaszewski <live.long.and.prosper@monoid.al>
src/Vulkan/CStruct/Extends.hs view
@@ -362,6 +362,8 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapPropertiesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PhysicalDeviceFragmentShadingRateEnumsPropertiesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRateFeaturesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRateKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRatePropertiesKHR)@@ -472,6 +474,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableInternalRepresentationKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutablePropertiesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineExecutableStatisticKHR)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PipelineFragmentShadingRateEnumStateCreateInfoNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PipelineFragmentShadingRateStateCreateInfoKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PipelineInfoKHR) import {-# SOURCE #-} Vulkan.Core10.Pipeline (PipelineInputAssemblyStateCreateInfo)@@ -834,6 +837,7 @@   Extends DeviceCreateInfo PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = ()   Extends DeviceCreateInfo PhysicalDeviceFragmentShadingRateFeaturesKHR = ()   Extends DeviceCreateInfo PhysicalDeviceShaderTerminateInvocationFeaturesKHR = ()+  Extends DeviceCreateInfo PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = ()   Extends DeviceQueueCreateInfo DeviceQueueGlobalPriorityCreateInfoEXT = ()   Extends FenceCreateInfo ExportFenceCreateInfo = ()   Extends FenceCreateInfo ExportFenceWin32HandleInfoKHR = ()@@ -845,6 +849,7 @@   Extends GraphicsPipelineCreateInfo PipelineCreationFeedbackCreateInfoEXT = ()   Extends GraphicsPipelineCreateInfo PipelineCompilerControlCreateInfoAMD = ()   Extends GraphicsPipelineCreateInfo PipelineFragmentShadingRateStateCreateInfoKHR = ()+  Extends GraphicsPipelineCreateInfo PipelineFragmentShadingRateEnumStateCreateInfoNV = ()   Extends ImageBlit2KHR CopyCommandTransformInfoQCOM = ()   Extends ImageCreateInfo DedicatedAllocationImageCreateInfoNV = ()   Extends ImageCreateInfo ExternalMemoryImageCreateInfoNV = ()@@ -958,6 +963,7 @@   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = ()   Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentShadingRateFeaturesKHR = ()   Extends PhysicalDeviceFeatures2 PhysicalDeviceShaderTerminateInvocationFeaturesKHR = ()+  Extends PhysicalDeviceFeatures2 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = ()   Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceExternalImageFormatInfo = ()   Extends PhysicalDeviceImageFormatInfo2 ImageFormatListCreateInfo = ()   Extends PhysicalDeviceImageFormatInfo2 PhysicalDeviceImageDrmFormatModifierInfoEXT = ()@@ -1008,6 +1014,7 @@   Extends PhysicalDeviceProperties2 PhysicalDeviceRobustness2PropertiesEXT = ()   Extends PhysicalDeviceProperties2 PhysicalDevicePortabilitySubsetPropertiesKHR = ()   Extends PhysicalDeviceProperties2 PhysicalDeviceFragmentShadingRatePropertiesKHR = ()+  Extends PhysicalDeviceProperties2 PhysicalDeviceFragmentShadingRateEnumsPropertiesNV = ()   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveInfoEXT = ()   Extends PhysicalDeviceSurfaceInfo2KHR SurfaceFullScreenExclusiveWin32InfoEXT = ()   Extends PipelineColorBlendStateCreateInfo PipelineColorBlendAdvancedStateCreateInfoEXT = ()@@ -1434,6 +1441,9 @@   STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR -> go @PhysicalDeviceFragmentShadingRateFeaturesKHR   STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR -> go @PhysicalDeviceFragmentShadingRatePropertiesKHR   STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR -> go @PhysicalDeviceShaderTerminateInvocationFeaturesKHR+  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV -> go @PhysicalDeviceFragmentShadingRateEnumsFeaturesNV+  STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV -> go @PhysicalDeviceFragmentShadingRateEnumsPropertiesNV+  STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV -> go @PipelineFragmentShadingRateEnumStateCreateInfoNV   t -> throwIO $ IOError Nothing InvalidArgument "peekChainHead" ("Unrecognized struct type: " <> show t) Nothing Nothing  where   go :: forall e . (Typeable e, FromCStruct e, ToCStruct e, Show e) => IO b@@ -1742,6 +1752,9 @@ {-# complete (::&) :: PhysicalDeviceFragmentShadingRateFeaturesKHR #-} {-# complete (::&) :: PhysicalDeviceFragmentShadingRatePropertiesKHR #-} {-# complete (::&) :: PhysicalDeviceShaderTerminateInvocationFeaturesKHR #-}+{-# complete (::&) :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV #-}+{-# complete (::&) :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV #-}+{-# complete (::&) :: PipelineFragmentShadingRateEnumStateCreateInfoNV #-}  -- | View the head and tail of a 'Chain', see '::&' --
src/Vulkan/Core10/AllocationCallbacks.hs view
@@ -26,17 +26,21 @@ -- -- == Valid Usage ----- -   @pfnAllocation@ /must/ be a valid pointer to a valid user-defined+-- -   #VUID-VkAllocationCallbacks-pfnAllocation-00632# @pfnAllocation@+--     /must/ be a valid pointer to a valid user-defined --     'Vulkan.Core10.FuncPointers.PFN_vkAllocationFunction' ----- -   @pfnReallocation@ /must/ be a valid pointer to a valid user-defined+-- -   #VUID-VkAllocationCallbacks-pfnReallocation-00633# @pfnReallocation@+--     /must/ be a valid pointer to a valid user-defined --     'Vulkan.Core10.FuncPointers.PFN_vkReallocationFunction' ----- -   @pfnFree@ /must/ be a valid pointer to a valid user-defined+-- -   #VUID-VkAllocationCallbacks-pfnFree-00634# @pfnFree@ /must/ be a+--     valid pointer to a valid user-defined --     'Vulkan.Core10.FuncPointers.PFN_vkFreeFunction' ----- -   If either of @pfnInternalAllocation@ or @pfnInternalFree@ is not---     @NULL@, both /must/ be valid callbacks+-- -   #VUID-VkAllocationCallbacks-pfnInternalAllocation-00635# If either+--     of @pfnInternalAllocation@ or @pfnInternalFree@ is not @NULL@, both+--     /must/ be valid callbacks -- -- = See Also --
src/Vulkan/Core10/Buffer.hs view
@@ -99,7 +99,8 @@ -- -- == Valid Usage ----- -   If the @flags@ member of @pCreateInfo@ includes+-- -   #VUID-vkCreateBuffer-flags-00911# If the @flags@ member of+--     @pCreateInfo@ includes --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT', --     creating this 'Vulkan.Core10.Handles.Buffer' /must/ not cause the --     total required sparse memory for all currently valid sparse@@ -108,17 +109,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateBuffer-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'BufferCreateInfo' structure+-- -   #VUID-vkCreateBuffer-pCreateInfo-parameter# @pCreateInfo@ /must/ be+--     a valid pointer to a valid 'BufferCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateBuffer-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pBuffer@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkCreateBuffer-pBuffer-parameter# @pBuffer@ /must/ be a valid+--     pointer to a 'Vulkan.Core10.Handles.Buffer' handle -- -- == Return Codes --@@ -191,30 +193,34 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @buffer@, either directly or---     via a 'Vulkan.Core10.Handles.BufferView', /must/ have completed---     execution+-- -   #VUID-vkDestroyBuffer-buffer-00922# All submitted commands that+--     refer to @buffer@, either directly or via a+--     'Vulkan.Core10.Handles.BufferView', /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyBuffer-buffer-00923# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @buffer@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyBuffer-buffer-00924# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @buffer@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyBuffer-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkDestroyBuffer-buffer-parameter# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.Buffer' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyBuffer-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @buffer@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyBuffer-buffer-parent# If @buffer@ is a valid handle,+--     it /must/ have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -252,18 +258,19 @@ -- -- == Valid Usage ----- -   @size@ /must/ be greater than @0@+-- -   #VUID-VkBufferCreateInfo-size-00912# @size@ /must/ be greater than+--     @0@ ----- -   If @sharingMode@ is+-- -   #VUID-VkBufferCreateInfo-sharingMode-00913# If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', --     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of --     @queueFamilyIndexCount@ @uint32_t@ values ----- -   If @sharingMode@ is+-- -   #VUID-VkBufferCreateInfo-sharingMode-00914# If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', --     @queueFamilyIndexCount@ /must/ be greater than @1@ ----- -   If @sharingMode@ is+-- -   #VUID-VkBufferCreateInfo-sharingMode-01419# If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', each --     element of @pQueueFamilyIndices@ /must/ be unique and /must/ be less --     than @pQueueFamilyPropertyCount@ returned by either@@ -272,29 +279,30 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2' --     for the @physicalDevice@ that was used to create @device@ ----- -   If the+-- -   #VUID-VkBufferCreateInfo-flags-00915# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseBinding sparse bindings> --     feature is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT' ----- -   If the+-- -   #VUID-VkBufferCreateInfo-flags-00916# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyBuffer sparse buffer residency> --     feature is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If the+-- -   #VUID-VkBufferCreateInfo-flags-00917# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency> --     feature is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT' ----- -   If @flags@ contains+-- -   #VUID-VkBufferCreateInfo-flags-00918# If @flags@ contains --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT' --     or --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT', --     it /must/ also contain --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT' ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBufferCreateInfo-pNext-00920# If the @pNext@ chain includes+--     a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo' --     structure, its @handleTypes@ member /must/ only contain bits that --     are also in@@ -305,11 +313,11 @@ --     handle types specified in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@ ----- -   If the protected memory feature is not enabled, @flags@ /must/ not---     contain+-- -   #VUID-VkBufferCreateInfo-flags-01887# If the protected memory+--     feature is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' ----- -   If any of the bits+-- -   #VUID-VkBufferCreateInfo-None-01888# If any of the bits --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT', --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT', --     or@@ -318,7 +326,8 @@ --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' --     /must/ not also be set ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBufferCreateInfo-pNext-01571# If the @pNext@ chain includes+--     a --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV' --     structure, and the @dedicatedAllocation@ member of the chained --     structure is 'Vulkan.Core10.FundamentalTypes.TRUE', then @flags@@@ -328,17 +337,17 @@ --     or --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT' ----- -   If+-- -   #VUID-VkBufferCreateInfo-deviceAddress-02604# If --     'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT'::@deviceAddress@ --     is not zero, @flags@ /must/ include --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT' ----- -   If+-- -   #VUID-VkBufferCreateInfo-opaqueCaptureAddress-03337# If --     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo'::@opaqueCaptureAddress@ --     is not zero, @flags@ /must/ include --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT' ----- -   If @flags@ includes+-- -   #VUID-VkBufferCreateInfo-flags-03338# If @flags@ includes --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT', --     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressCaptureReplay bufferDeviceAddressCaptureReplay>@@ -348,32 +357,35 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBufferCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_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+-- -   #VUID-VkBufferCreateInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_EXT_buffer_device_address.BufferDeviceAddressCreateInfoEXT', --     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.BufferOpaqueCaptureAddressCreateInfo', --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV', --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkBufferCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkBufferCreateInfo-flags-parameter# @flags@ /must/ be a valid+--     combination of --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlagBits' --     values ----- -   @usage@ /must/ be a valid combination of+-- -   #VUID-VkBufferCreateInfo-usage-parameter# @usage@ /must/ be a valid+--     combination of --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits' values ----- -   @usage@ /must/ not be @0@+-- -   #VUID-VkBufferCreateInfo-usage-requiredbitmask# @usage@ /must/ not+--     be @0@ ----- -   @sharingMode@ /must/ be a valid---     'Vulkan.Core10.Enums.SharingMode.SharingMode' value+-- -   #VUID-VkBufferCreateInfo-sharingMode-parameter# @sharingMode@ /must/+--     be a valid 'Vulkan.Core10.Enums.SharingMode.SharingMode' value -- -- = See Also --
src/Vulkan/Core10/BufferView.hs view
@@ -70,17 +70,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateBufferView-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'BufferViewCreateInfo' structure+-- -   #VUID-vkCreateBufferView-pCreateInfo-parameter# @pCreateInfo@ /must/+--     be a valid pointer to a valid 'BufferViewCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateBufferView-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pView@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.BufferView' handle+-- -   #VUID-vkCreateBufferView-pView-parameter# @pView@ /must/ be a valid+--     pointer to a 'Vulkan.Core10.Handles.BufferView' handle -- -- == Return Codes --@@ -151,31 +152,35 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @bufferView@ /must/ have---     completed execution+-- -   #VUID-vkDestroyBufferView-bufferView-00936# All submitted commands+--     that refer to @bufferView@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyBufferView-bufferView-00937# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @bufferView@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyBufferView-bufferView-00938# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @bufferView@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyBufferView-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @bufferView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @bufferView@ /must/ be a valid 'Vulkan.Core10.Handles.BufferView'---     handle+-- -   #VUID-vkDestroyBufferView-bufferView-parameter# If @bufferView@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @bufferView@ /must/ be+--     a valid 'Vulkan.Core10.Handles.BufferView' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyBufferView-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @bufferView@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyBufferView-bufferView-parent# If @bufferView@ is a+--     valid handle, it /must/ have been created, allocated, or retrieved+--     from @device@ -- -- == Host Synchronization --@@ -213,43 +218,47 @@ -- -- == Valid Usage ----- -   @offset@ /must/ be less than the size of @buffer@+-- -   #VUID-VkBufferViewCreateInfo-offset-00925# @offset@ /must/ be less+--     than the size of @buffer@ ----- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @range@ /must/ be greater than @0@+-- -   #VUID-VkBufferViewCreateInfo-range-00928# If @range@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ /must/ be greater+--     than @0@ ----- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @range@ /must/ be an integer multiple of the texel block size of---     @format@+-- -   #VUID-VkBufferViewCreateInfo-range-00929# If @range@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ /must/ be an+--     integer multiple of the texel block size of @format@ ----- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     the number of texel buffer elements given by (⌊@range@ \/ (texel---     block size)⌋ × (texels per block)) where texel block size and texels---     per block are as defined in the+-- -   #VUID-VkBufferViewCreateInfo-range-00930# If @range@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', the number of texel buffer+--     elements given by (⌊@range@ \/ (texel block size)⌋ × (texels per+--     block)) where texel block size and texels per block are as defined+--     in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats> --     table for @format@, /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTexelBufferElements@ ----- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     the sum of @offset@ and @range@ /must/ be less than or equal to the---     size of @buffer@+-- -   #VUID-VkBufferViewCreateInfo-offset-00931# If @range@ is not equal+--     to 'Vulkan.Core10.APIConstants.WHOLE_SIZE', the sum of @offset@ and+--     @range@ /must/ be less than or equal to the size of @buffer@ ----- -   If @range@ is equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE', the---     number of texel buffer elements given by (⌊(size - @offset@) \/---     (texel block size)⌋ × (texels per block)) where size is the size of---     @buffer@, and texel block size and texels per block are as defined---     in the+-- -   #VUID-VkBufferViewCreateInfo-range-04059# If @range@ is equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', the number of texel buffer+--     elements given by (⌊(size - @offset@) \/ (texel block size)⌋ ×+--     (texels per block)) where size is the size of @buffer@, and texel+--     block size and texels per block are as defined in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats> --     table for @format@, /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTexelBufferElements@ ----- -   @buffer@ /must/ have been created with a @usage@ value containing at---     least one of+-- -   #VUID-VkBufferViewCreateInfo-buffer-00932# @buffer@ /must/ have been+--     created with a @usage@ value containing at least one of --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT' --     or --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT' ----- -   If @buffer@ was created with @usage@ containing+-- -   #VUID-VkBufferViewCreateInfo-buffer-00933# If @buffer@ was created+--     with @usage@ containing --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT', --     @format@ /must/ be supported for uniform texel buffers, as specified --     by the@@ -259,7 +268,8 @@ --     returned by --     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties' ----- -   If @buffer@ was created with @usage@ containing+-- -   #VUID-VkBufferViewCreateInfo-buffer-00934# If @buffer@ was created+--     with @usage@ containing --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT', --     @format@ /must/ be supported for storage texel buffers, as specified --     by the@@ -269,15 +279,16 @@ --     returned by --     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties' ----- -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkBufferViewCreateInfo-buffer-00935# If @buffer@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   If the+-- -   #VUID-VkBufferViewCreateInfo-offset-02749# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment> --     feature is not enabled, @offset@ /must/ be a multiple of --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@ ----- -   If the+-- -   #VUID-VkBufferViewCreateInfo-buffer-02750# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment> --     feature is enabled and if @buffer@ was created with @usage@ --     containing@@ -291,7 +302,7 @@ --     bytes, then the size of a single component of @format@ is used --     instead ----- -   If the+-- -   #VUID-VkBufferViewCreateInfo-buffer-02751# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment> --     feature is enabled and if @buffer@ was created with @usage@ --     containing@@ -307,16 +318,19 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBufferViewCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkBufferViewCreateInfo-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkBufferViewCreateInfo-flags-zerobitmask# @flags@ /must/ be+--     @0@ ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkBufferViewCreateInfo-buffer-parameter# @buffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-VkBufferViewCreateInfo-format-parameter# @format@ /must/ be a+--     valid 'Vulkan.Core10.Enums.Format.Format' value -- -- = See Also --
src/Vulkan/Core10/CommandBuffer.hs view
@@ -140,16 +140,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkAllocateCommandBuffers-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pAllocateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkAllocateCommandBuffers-pAllocateInfo-parameter#+--     @pAllocateInfo@ /must/ be a valid pointer to a valid --     'CommandBufferAllocateInfo' structure ----- -   @pCommandBuffers@ /must/ be a valid pointer to an array of+-- -   #VUID-vkAllocateCommandBuffers-pCommandBuffers-parameter#+--     @pCommandBuffers@ /must/ be a valid pointer to an array of --     @pAllocateInfo->commandBufferCount@ --     'Vulkan.Core10.Handles.CommandBuffer' handles ----- -   @pAllocateInfo->commandBufferCount@ /must/ be greater than @0@+-- -   #VUID-vkAllocateCommandBuffers-pAllocateInfo::commandBufferCount-arraylength#+--     @pAllocateInfo->commandBufferCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -227,27 +231,32 @@ -- -- == Valid Usage ----- -   All elements of @pCommandBuffers@ /must/ not be in the+-- -   #VUID-vkFreeCommandBuffers-pCommandBuffers-00047# All elements of+--     @pCommandBuffers@ /must/ not be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state> ----- -   @pCommandBuffers@ /must/ be a valid pointer to an array of---     @commandBufferCount@ 'Vulkan.Core10.Handles.CommandBuffer' handles,---     each element of which /must/ either be a valid handle or @NULL@+-- -   #VUID-vkFreeCommandBuffers-pCommandBuffers-00048# @pCommandBuffers@+--     /must/ be a valid pointer to an array of @commandBufferCount@+--     'Vulkan.Core10.Handles.CommandBuffer' handles, each element of which+--     /must/ either be a valid handle or @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkFreeCommandBuffers-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'---     handle+-- -   #VUID-vkFreeCommandBuffers-commandPool-parameter# @commandPool@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandPool' handle ----- -   @commandBufferCount@ /must/ be greater than @0@+-- -   #VUID-vkFreeCommandBuffers-commandBufferCount-arraylength#+--     @commandBufferCount@ /must/ be greater than @0@ ----- -   @commandPool@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkFreeCommandBuffers-commandPool-parent# @commandPool@ /must/+--     have been created, allocated, or retrieved from @device@ ----- -   Each element of @pCommandBuffers@ that is a valid handle /must/ have---     been created, allocated, or retrieved from @commandPool@+-- -   #VUID-vkFreeCommandBuffers-pCommandBuffers-parent# Each element of+--     @pCommandBuffers@ that is a valid handle /must/ have been created,+--     allocated, or retrieved from @commandPool@ -- -- == Host Synchronization --@@ -293,29 +302,33 @@ -- -- == Valid Usage ----- -   @commandBuffer@ /must/ not be in the+-- -   #VUID-vkBeginCommandBuffer-commandBuffer-00049# @commandBuffer@+--     /must/ not be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording or pending state> ----- -   If @commandBuffer@ was allocated from a---     'Vulkan.Core10.Handles.CommandPool' which did not have the+-- -   #VUID-vkBeginCommandBuffer-commandBuffer-00050# If @commandBuffer@+--     was allocated from a 'Vulkan.Core10.Handles.CommandPool' which did+--     not have the --     'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT' --     flag set, @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle initial state> ----- -   If @commandBuffer@ is a secondary command buffer, the---     @pInheritanceInfo@ member of @pBeginInfo@ /must/ be a valid---     'CommandBufferInheritanceInfo' structure+-- -   #VUID-vkBeginCommandBuffer-commandBuffer-00051# If @commandBuffer@+--     is a secondary command buffer, the @pInheritanceInfo@ member of+--     @pBeginInfo@ /must/ be a valid 'CommandBufferInheritanceInfo'+--     structure ----- -   If @commandBuffer@ is a secondary command buffer and either the---     @occlusionQueryEnable@ member of the @pInheritanceInfo@ member of---     @pBeginInfo@ is 'Vulkan.Core10.FundamentalTypes.FALSE', or the---     precise occlusion queries feature is not enabled, the @queryFlags@---     member of the @pInheritanceInfo@ member @pBeginInfo@ /must/ not---     contain+-- -   #VUID-vkBeginCommandBuffer-commandBuffer-00052# If @commandBuffer@+--     is a secondary command buffer and either the @occlusionQueryEnable@+--     member of the @pInheritanceInfo@ member of @pBeginInfo@ is+--     'Vulkan.Core10.FundamentalTypes.FALSE', or the precise occlusion+--     queries feature is not enabled, the @queryFlags@ member of the+--     @pInheritanceInfo@ member @pBeginInfo@ /must/ not contain --     'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT' ----- -   If @commandBuffer@ is a primary command buffer, then---     @pBeginInfo->flags@ /must/ not set both the+-- -   #VUID-vkBeginCommandBuffer-commandBuffer-02840# If @commandBuffer@+--     is a primary command buffer, then @pBeginInfo->flags@ /must/ not set+--     both the --     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT' --     and the --     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'@@ -323,11 +336,11 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkBeginCommandBuffer-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pBeginInfo@ /must/ be a valid pointer to a valid---     'CommandBufferBeginInfo' structure+-- -   #VUID-vkBeginCommandBuffer-pBeginInfo-parameter# @pBeginInfo@ /must/+--     be a valid pointer to a valid 'CommandBufferBeginInfo' structure -- -- == Host Synchronization --@@ -400,29 +413,32 @@ -- -- == Valid Usage ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkEndCommandBuffer-commandBuffer-00059# @commandBuffer@ /must/+--     be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   If @commandBuffer@ is a primary command buffer, there /must/ not be---     an active render pass instance+-- -   #VUID-vkEndCommandBuffer-commandBuffer-00060# If @commandBuffer@ is+--     a primary command buffer, there /must/ not be an active render pass+--     instance ----- -   All queries made+-- -   #VUID-vkEndCommandBuffer-commandBuffer-00061# All queries made --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active> --     during the recording of @commandBuffer@ /must/ have been made --     inactive ----- -   Conditional rendering /must/ not be+-- -   #VUID-vkEndCommandBuffer-None-01978# Conditional rendering /must/+--     not be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active> ----- -   If @commandBuffer@ is a secondary command buffer, there /must/ not---     be an outstanding+-- -   #VUID-vkEndCommandBuffer-commandBuffer-01815# If @commandBuffer@ is+--     a secondary command buffer, there /must/ not be an outstanding --     'Vulkan.Extensions.VK_EXT_debug_utils.cmdBeginDebugUtilsLabelEXT' --     command recorded to @commandBuffer@ that has not previously been --     ended by a call to --     'Vulkan.Extensions.VK_EXT_debug_utils.cmdEndDebugUtilsLabelEXT' ----- -   If @commandBuffer@ is a secondary command buffer, there /must/ not---     be an outstanding+-- -   #VUID-vkEndCommandBuffer-commandBuffer-00062# If @commandBuffer@ is+--     a secondary command buffer, there /must/ not be an outstanding --     'Vulkan.Extensions.VK_EXT_debug_marker.cmdDebugMarkerBeginEXT' --     command recorded to @commandBuffer@ that has not previously been --     ended by a call to@@ -430,8 +446,8 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkEndCommandBuffer-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle -- -- == Host Synchronization --@@ -487,19 +503,21 @@ -- -- == Valid Usage ----- -   @commandBuffer@ /must/ not be in the+-- -   #VUID-vkResetCommandBuffer-commandBuffer-00045# @commandBuffer@+--     /must/ not be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state> ----- -   @commandBuffer@ /must/ have been allocated from a pool that was---     created with the+-- -   #VUID-vkResetCommandBuffer-commandBuffer-00046# @commandBuffer@+--     /must/ have been allocated from a pool that was created with the --     'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkResetCommandBuffer-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-vkResetCommandBuffer-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.CommandBufferResetFlagBits.CommandBufferResetFlagBits' --     values --@@ -558,18 +576,19 @@   { -- | @commandPool@ is the command pool from which the command buffers are     -- allocated.     ---    -- @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'-    -- handle+    -- #VUID-VkCommandBufferAllocateInfo-commandPool-parameter# @commandPool@+    -- /must/ be a valid 'Vulkan.Core10.Handles.CommandPool' handle     commandPool :: CommandPool   , -- | @level@ is a 'Vulkan.Core10.Enums.CommandBufferLevel.CommandBufferLevel'     -- value specifying the command buffer level.     ---    -- @level@ /must/ be a valid-    -- 'Vulkan.Core10.Enums.CommandBufferLevel.CommandBufferLevel' value+    -- #VUID-VkCommandBufferAllocateInfo-level-parameter# @level@ /must/ be a+    -- valid 'Vulkan.Core10.Enums.CommandBufferLevel.CommandBufferLevel' value     level :: CommandBufferLevel   , -- | @commandBufferCount@ is the number of command buffers to allocate from     -- the pool.     --+    -- #VUID-VkCommandBufferAllocateInfo-commandBufferCount-00044#     -- @commandBufferCount@ /must/ be greater than @0@     commandBufferCount :: Word32   }@@ -624,48 +643,52 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries> --     feature is not enabled, @occlusionQueryEnable@ /must/ be --     'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If the+-- -   #VUID-VkCommandBufferInheritanceInfo-queryFlags-00057# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries> --     feature is enabled, @queryFlags@ /must/ be a valid combination of --     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits' --     values ----- -   If the+-- -   #VUID-VkCommandBufferInheritanceInfo-queryFlags-02788# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries> --     feature is not enabled, @queryFlags@ /must/ be @0@ ----- -   If the+-- -   #VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-02789# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries> --     feature is enabled, @pipelineStatistics@ /must/ be a valid --     combination of --     'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits' --     values ----- -   If the+-- -   #VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries> --     feature is not enabled, @pipelineStatistics@ /must/ be @0@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkCommandBufferInheritanceInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_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+-- -   #VUID-VkCommandBufferInheritanceInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_EXT_conditional_rendering.CommandBufferInheritanceConditionalRenderingInfoEXT' --     or --     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkCommandBufferInheritanceInfo-sType-unique# The @sType@ value+--     of each struct in the @pNext@ chain /must/ be unique ----- -   Both of @framebuffer@, and @renderPass@ that are valid handles of+-- -   #VUID-VkCommandBufferInheritanceInfo-commonparent# Both of+--     @framebuffer@, and @renderPass@ that are valid handles of --     non-ignored parameters /must/ have been created, allocated, or --     retrieved from the same 'Vulkan.Core10.Handles.Device' --@@ -802,17 +825,17 @@ -- -- == Valid Usage ----- -   If @flags@ contains+-- -   #VUID-VkCommandBufferBeginInfo-flags-00053# If @flags@ contains --     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT', --     the @renderPass@ member of @pInheritanceInfo@ /must/ be a valid --     'Vulkan.Core10.Handles.RenderPass' ----- -   If @flags@ contains+-- -   #VUID-VkCommandBufferBeginInfo-flags-00054# If @flags@ contains --     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT', --     the @subpass@ member of @pInheritanceInfo@ /must/ be a valid subpass --     index within the @renderPass@ member of @pInheritanceInfo@ ----- -   If @flags@ contains+-- -   #VUID-VkCommandBufferBeginInfo-flags-00055# If @flags@ contains --     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT', --     the @framebuffer@ member of @pInheritanceInfo@ /must/ be either --     'Vulkan.Core10.APIConstants.NULL_HANDLE', or a valid@@ -821,16 +844,18 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkCommandBufferBeginInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkCommandBufferBeginInfo-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupCommandBufferBeginInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkCommandBufferBeginInfo-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkCommandBufferBeginInfo-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.CommandBufferUsageFlagBits' --     values --
src/Vulkan/Core10/CommandBufferBuilding.hs view
@@ -259,10344 +259,11105 @@ -- -- == Valid Usage ----- -   If @pipelineBindPoint@ is---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE',---     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   If @pipelineBindPoint@ is---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',---     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   If @pipelineBindPoint@ is---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE',---     @pipeline@ /must/ be a compute pipeline------ -   If @pipelineBindPoint@ is---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',---     @pipeline@ /must/ be a graphics pipeline------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-variableMultisampleRate variable multisample rate>---     feature is not supported, @pipeline@ is a graphics pipeline, the---     current subpass---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments uses no attachments>,---     and this is not the first call to this function with a graphics---     pipeline after transitioning to the current subpass, then the sample---     count specified by this pipeline /must/ match that set in the---     previous pipeline------ -   If---     'Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@---     is 'Vulkan.Core10.FundamentalTypes.FALSE', and @pipeline@ is a---     graphics pipeline created with a---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'---     structure having its @sampleLocationsEnable@ member set to---     'Vulkan.Core10.FundamentalTypes.TRUE' but without---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'---     enabled then the current render pass instance /must/ have been begun---     by specifying a---     'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT'---     structure whose @pPostSubpassSampleLocations@ member contains an---     element with a @subpassIndex@ matching the current subpass index and---     the @sampleLocationsInfo@ member of that element /must/ match the---     @sampleLocationsInfo@ specified in---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'---     when the pipeline was created------ -   This command /must/ not be recorded when transform feedback is---     active------ -   If @pipelineBindPoint@ is---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR',---     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   If @pipelineBindPoint@ is---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR',---     the @pipeline@ /must/ be a ray tracing pipeline------ -   The @pipeline@ /must/ not have been created with---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'---     set------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pipelineBindPoint@ /must/ be a valid---     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value------ -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   Both of @commandBuffer@, and @pipeline@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Pipeline',--- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'-cmdBindPipeline :: forall io-                 . (MonadIO io)-                => -- | @commandBuffer@ is the command buffer that the pipeline will be bound-                   -- to.-                   CommandBuffer-                -> -- | @pipelineBindPoint@ is a-                   -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value-                   -- specifying to which bind point the pipeline is bound. Binding one does-                   -- not disturb the others.-                   PipelineBindPoint-                -> -- | @pipeline@ is the pipeline to be bound.-                   Pipeline-                -> io ()-cmdBindPipeline commandBuffer pipelineBindPoint pipeline = liftIO $ do-  let vkCmdBindPipelinePtr = pVkCmdBindPipeline (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdBindPipelinePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindPipeline is null" Nothing Nothing-  let vkCmdBindPipeline' = mkVkCmdBindPipeline vkCmdBindPipelinePtr-  vkCmdBindPipeline' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (pipeline)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetViewport-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()---- | vkCmdSetViewport - Set the viewport on a command buffer------ = Description------ The viewport parameters taken from element i of @pViewports@ replace the--- current state for the viewport index @firstViewport@ + i, for i in [0,--- @viewportCount@).------ == Valid Usage------ -   @firstViewport@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@------ -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@---     and---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,---     inclusive------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>---     feature is not enabled, @firstViewport@ /must/ be @0@------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>---     feature is not enabled, @viewportCount@ /must/ be @1@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pViewports@ /must/ be a valid pointer to an array of---     @viewportCount@ valid 'Vulkan.Core10.Pipeline.Viewport' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   @viewportCount@ /must/ be greater than @0@------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Pipeline.Viewport'-cmdSetViewport :: forall io-                . (MonadIO io)-               => -- | @commandBuffer@ is the command buffer into which the command will be-                  -- recorded.-                  CommandBuffer-               -> -- | @firstViewport@ is the index of the first viewport whose parameters are-                  -- updated by the command.-                  ("firstViewport" ::: Word32)-               -> -- | @pViewports@ is a pointer to an array of-                  -- 'Vulkan.Core10.Pipeline.Viewport' structures specifying viewport-                  -- parameters.-                  ("viewports" ::: Vector Viewport)-               -> io ()-cmdSetViewport commandBuffer firstViewport viewports = liftIO . evalContT $ do-  let vkCmdSetViewportPtr = pVkCmdSetViewport (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdSetViewportPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetViewport is null" Nothing Nothing-  let vkCmdSetViewport' = mkVkCmdSetViewport vkCmdSetViewportPtr-  pPViewports <- ContT $ allocaBytesAligned @Viewport ((Data.Vector.length (viewports)) * 24) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e) . ($ ())) (viewports)-  lift $ vkCmdSetViewport' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (viewports)) :: Word32)) (pPViewports)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetScissor-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()---- | vkCmdSetScissor - Set the dynamic scissor rectangles on a command buffer------ = Description------ The scissor rectangles taken from element i of @pScissors@ replace the--- current state for the scissor index @firstScissor@ + i, for i in [0,--- @scissorCount@).------ This command sets the state for a given draw when the graphics pipeline--- is created with 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR'--- set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.------ == Valid Usage------ -   @firstScissor@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@------ -   The sum of @firstScissor@ and @scissorCount@ /must/ be between @1@---     and---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,---     inclusive------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>---     feature is not enabled, @firstScissor@ /must/ be @0@------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>---     feature is not enabled, @scissorCount@ /must/ be @1@------ -   The @x@ and @y@ members of @offset@ member of any element of---     @pScissors@ /must/ be greater than or equal to @0@------ -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a---     signed integer addition overflow for any element of @pScissors@------ -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a---     signed integer addition overflow for any element of @pScissors@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pScissors@ /must/ be a valid pointer to an array of @scissorCount@---     'Vulkan.Core10.FundamentalTypes.Rect2D' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   @scissorCount@ /must/ be greater than @0@------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.Rect2D'-cmdSetScissor :: forall io-               . (MonadIO io)-              => -- | @commandBuffer@ is the command buffer into which the command will be-                 -- recorded.-                 CommandBuffer-              -> -- | @firstScissor@ is the index of the first scissor whose state is updated-                 -- by the command.-                 ("firstScissor" ::: Word32)-              -> -- | @pScissors@ is a pointer to an array of-                 -- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures defining scissor-                 -- rectangles.-                 ("scissors" ::: Vector Rect2D)-              -> io ()-cmdSetScissor commandBuffer firstScissor scissors = liftIO . evalContT $ do-  let vkCmdSetScissorPtr = pVkCmdSetScissor (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdSetScissorPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetScissor is null" Nothing Nothing-  let vkCmdSetScissor' = mkVkCmdSetScissor vkCmdSetScissorPtr-  pPScissors <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (scissors)) * 16) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (scissors)-  lift $ vkCmdSetScissor' (commandBufferHandle (commandBuffer)) (firstScissor) ((fromIntegral (Data.Vector.length $ (scissors)) :: Word32)) (pPScissors)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetLineWidth-  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> IO ()---- | vkCmdSetLineWidth - Set the dynamic line width state------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-wideLines wide lines>---     feature is not enabled, @lineWidth@ /must/ be @1.0@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdSetLineWidth :: forall io-                 . (MonadIO io)-                => -- | @commandBuffer@ is the command buffer into which the command will be-                   -- recorded.-                   CommandBuffer-                -> -- | @lineWidth@ is the width of rasterized line segments.-                   ("lineWidth" ::: Float)-                -> io ()-cmdSetLineWidth commandBuffer lineWidth = liftIO $ do-  let vkCmdSetLineWidthPtr = pVkCmdSetLineWidth (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdSetLineWidthPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetLineWidth is null" Nothing Nothing-  let vkCmdSetLineWidth' = mkVkCmdSetLineWidth vkCmdSetLineWidthPtr-  vkCmdSetLineWidth' (commandBufferHandle (commandBuffer)) (CFloat (lineWidth))-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetDepthBias-  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()---- | vkCmdSetDepthBias - Set the depth bias dynamic state------ = Description------ If @depthBiasEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE', no depth--- bias is applied and the fragment’s depth values are unchanged.------ @depthBiasSlopeFactor@ scales the maximum depth slope of the polygon,--- and @depthBiasConstantFactor@ scales an implementation-dependent--- constant that relates to the usable resolution of the depth buffer. The--- resulting values are summed to produce the depth bias value which is--- then clamped to a minimum or maximum value specified by--- @depthBiasClamp@. @depthBiasSlopeFactor@, @depthBiasConstantFactor@, and--- @depthBiasClamp@ /can/ each be positive, negative, or zero.------ The maximum depth slope m of a triangle is------ \[m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2---         +  \left({{\partial z_f} \over {\partial y_f}}\right)^2}\]------ where (xf, yf, zf) is a point on the triangle. m /may/ be approximated--- as------ \[m = \max\left( \left| { {\partial z_f} \over {\partial x_f} } \right|,---                \left| { {\partial z_f} \over {\partial y_f} } \right|---        \right).\]------ The minimum resolvable difference r is an implementation-dependent--- parameter that depends on the depth buffer representation. It is the--- smallest difference in framebuffer coordinate z values that is--- guaranteed to remain distinct throughout polygon rasterization and in--- the depth buffer. All pairs of fragments generated by the rasterization--- of two polygons with otherwise identical vertices, but @z@f values that--- differ by r, will have distinct depth values.------ For fixed-point depth buffer representations, r is constant throughout--- the range of the entire depth buffer. For floating-point depth buffers,--- there is no single minimum resolvable difference. In this case, the--- minimum resolvable difference for a given polygon is dependent on the--- maximum exponent, e, in the range of z values spanned by the primitive.--- If n is the number of bits in the floating-point mantissa, the minimum--- resolvable difference, r, for the given primitive is defined as------ -   r = 2e-n------ If a triangle is rasterized using the--- 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV' polygon--- mode, then this minimum resolvable difference /may/ not be resolvable--- for samples outside of the triangle, where the depth is extrapolated.------ If no depth buffer is present, r is undefined.------ The bias value o for a polygon is------ \[\begin{aligned}--- o &= \mathrm{dbclamp}( m \times \mathtt{depthBiasSlopeFactor} + r \times \mathtt{depthBiasConstantFactor} ) \\--- \text{where} &\quad \mathrm{dbclamp}(x) =--- \begin{cases}---     x                                 & \mathtt{depthBiasClamp} = 0 \ \text{or}\ \texttt{NaN} \\---     \min(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} > 0 \\---     \max(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} < 0 \\--- \end{cases}--- \end{aligned}\]------ m is computed as described above. If the depth buffer uses a fixed-point--- representation, m is a function of depth values in the range [0,1], and--- o is applied to depth values in the same range.------ For fixed-point depth buffers, fragment depth values are always limited--- to the range [0,1] by clamping after depth bias addition is performed.--- Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled,--- fragment depth values are clamped even when the depth buffer uses a--- floating-point representation.------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBiasClamp depth bias clamping>---     feature is not enabled, @depthBiasClamp@ /must/ be @0.0@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdSetDepthBias :: forall io-                 . (MonadIO io)-                => -- | @commandBuffer@ is the command buffer into which the command will be-                   -- recorded.-                   CommandBuffer-                -> -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant-                   -- depth value added to each fragment.-                   ("depthBiasConstantFactor" ::: Float)-                -> -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.-                   ("depthBiasClamp" ::: Float)-                -> -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope-                   -- in depth bias calculations.-                   ("depthBiasSlopeFactor" ::: Float)-                -> io ()-cmdSetDepthBias commandBuffer depthBiasConstantFactor depthBiasClamp depthBiasSlopeFactor = liftIO $ do-  let vkCmdSetDepthBiasPtr = pVkCmdSetDepthBias (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdSetDepthBiasPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBias is null" Nothing Nothing-  let vkCmdSetDepthBias' = mkVkCmdSetDepthBias vkCmdSetDepthBiasPtr-  vkCmdSetDepthBias' (commandBufferHandle (commandBuffer)) (CFloat (depthBiasConstantFactor)) (CFloat (depthBiasClamp)) (CFloat (depthBiasSlopeFactor))-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetBlendConstants-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()---- | vkCmdSetBlendConstants - Set the values of blend constants------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdSetBlendConstants :: forall io-                      . (MonadIO io)-                     => -- | @commandBuffer@ is the command buffer into which the command will be-                        -- recorded.-                        CommandBuffer-                     -> -- | @blendConstants@ is a pointer to an array of four values specifying the-                        -- R, G, B, and A components of the blend constant color used in blending,-                        -- depending on the-                        -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.-                        ("blendConstants" ::: (Float, Float, Float, Float))-                     -> io ()-cmdSetBlendConstants commandBuffer blendConstants = liftIO . evalContT $ do-  let vkCmdSetBlendConstantsPtr = pVkCmdSetBlendConstants (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdSetBlendConstantsPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetBlendConstants is null" Nothing Nothing-  let vkCmdSetBlendConstants' = mkVkCmdSetBlendConstants vkCmdSetBlendConstantsPtr-  pBlendConstants <- ContT $ allocaBytesAligned @(FixedArray 4 CFloat) 16 4-  let pBlendConstants' = lowerArrayPtr pBlendConstants-  lift $ case (blendConstants) of-    (e0, e1, e2, e3) -> do-      poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))-      poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))-      poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))-      poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-  lift $ vkCmdSetBlendConstants' (commandBufferHandle (commandBuffer)) (pBlendConstants)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetDepthBounds-  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()---- | vkCmdSetDepthBounds - Set the depth bounds test values for a command--- buffer------ = Description------ This command sets the state for a given draw when the graphics pipeline--- is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS' set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.------ == Valid Usage------ -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled---     @minDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive------ -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled---     @maxDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdSetDepthBounds :: forall io-                   . (MonadIO io)-                  => -- | @commandBuffer@ is the command buffer into which the command will be-                     -- recorded.-                     CommandBuffer-                  -> -- | @minDepthBounds@ is the minimum depth bound.-                     ("minDepthBounds" ::: Float)-                  -> -- | @maxDepthBounds@ is the maximum depth bound.-                     ("maxDepthBounds" ::: Float)-                  -> io ()-cmdSetDepthBounds commandBuffer minDepthBounds maxDepthBounds = liftIO $ do-  let vkCmdSetDepthBoundsPtr = pVkCmdSetDepthBounds (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdSetDepthBoundsPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBounds is null" Nothing Nothing-  let vkCmdSetDepthBounds' = mkVkCmdSetDepthBounds vkCmdSetDepthBoundsPtr-  vkCmdSetDepthBounds' (commandBufferHandle (commandBuffer)) (CFloat (minDepthBounds)) (CFloat (maxDepthBounds))-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetStencilCompareMask-  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()---- | vkCmdSetStencilCompareMask - Set the stencil compare mask dynamic state------ = Description------ This command sets the state for a given draw when the graphics pipeline--- is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_COMPARE_MASK'--- set in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @faceMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values------ -   @faceMask@ /must/ not be @0@------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'-cmdSetStencilCompareMask :: forall io-                          . (MonadIO io)-                         => -- | @commandBuffer@ is the command buffer into which the command will be-                            -- recorded.-                            CommandBuffer-                         -> -- | @faceMask@ is a bitmask of-                            -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying-                            -- the set of stencil state for which to update the compare mask.-                            ("faceMask" ::: StencilFaceFlags)-                         -> -- | @compareMask@ is the new value to use as the stencil compare mask.-                            ("compareMask" ::: Word32)-                         -> io ()-cmdSetStencilCompareMask commandBuffer faceMask compareMask = liftIO $ do-  let vkCmdSetStencilCompareMaskPtr = pVkCmdSetStencilCompareMask (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdSetStencilCompareMaskPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilCompareMask is null" Nothing Nothing-  let vkCmdSetStencilCompareMask' = mkVkCmdSetStencilCompareMask vkCmdSetStencilCompareMaskPtr-  vkCmdSetStencilCompareMask' (commandBufferHandle (commandBuffer)) (faceMask) (compareMask)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetStencilWriteMask-  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()---- | vkCmdSetStencilWriteMask - Set the stencil write mask dynamic state------ = Description------ This command sets the state for a given draw when the graphics pipeline--- is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_WRITE_MASK' set--- in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @faceMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values------ -   @faceMask@ /must/ not be @0@------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'-cmdSetStencilWriteMask :: forall io-                        . (MonadIO io)-                       => -- | @commandBuffer@ is the command buffer into which the command will be-                          -- recorded.-                          CommandBuffer-                       -> -- | @faceMask@ is a bitmask of-                          -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying-                          -- the set of stencil state for which to update the write mask, as-                          -- described above for 'cmdSetStencilCompareMask'.-                          ("faceMask" ::: StencilFaceFlags)-                       -> -- | @writeMask@ is the new value to use as the stencil write mask.-                          ("writeMask" ::: Word32)-                       -> io ()-cmdSetStencilWriteMask commandBuffer faceMask writeMask = liftIO $ do-  let vkCmdSetStencilWriteMaskPtr = pVkCmdSetStencilWriteMask (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdSetStencilWriteMaskPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilWriteMask is null" Nothing Nothing-  let vkCmdSetStencilWriteMask' = mkVkCmdSetStencilWriteMask vkCmdSetStencilWriteMaskPtr-  vkCmdSetStencilWriteMask' (commandBufferHandle (commandBuffer)) (faceMask) (writeMask)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetStencilReference-  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()---- | vkCmdSetStencilReference - Set the stencil reference dynamic state------ = Description------ This command sets the state for a given draw when the graphics pipeline--- is created with--- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_REFERENCE' set--- in--- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @faceMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values------ -   @faceMask@ /must/ not be @0@------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'-cmdSetStencilReference :: forall io-                        . (MonadIO io)-                       => -- | @commandBuffer@ is the command buffer into which the command will be-                          -- recorded.-                          CommandBuffer-                       -> -- | @faceMask@ is a bitmask of-                          -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying-                          -- the set of stencil state for which to update the reference value, as-                          -- described above for 'cmdSetStencilCompareMask'.-                          ("faceMask" ::: StencilFaceFlags)-                       -> -- | @reference@ is the new value to use as the stencil reference value.-                          ("reference" ::: Word32)-                       -> io ()-cmdSetStencilReference commandBuffer faceMask reference = liftIO $ do-  let vkCmdSetStencilReferencePtr = pVkCmdSetStencilReference (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdSetStencilReferencePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilReference is null" Nothing Nothing-  let vkCmdSetStencilReference' = mkVkCmdSetStencilReference vkCmdSetStencilReferencePtr-  vkCmdSetStencilReference' (commandBufferHandle (commandBuffer)) (faceMask) (reference)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBindDescriptorSets-  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()---- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer------ = Description------ 'cmdBindDescriptorSets' causes the sets numbered [@firstSet@..--- @firstSet@+@descriptorSetCount@-1] to use the bindings stored in--- @pDescriptorSets@[0..descriptorSetCount-1] for subsequent--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline commands>--- set by @pipelineBindPoint@. Any bindings that were previously applied--- via these sets are no longer valid.------ Once bound, a descriptor set affects rendering of subsequent commands--- that interact with the given pipeline type in the command buffer until--- either a different set is bound to the same set number, or the set is--- disturbed as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.------ A compatible descriptor set /must/ be bound for all set numbers that any--- shaders in a pipeline access, at the time that a draw or dispatch--- command is recorded to execute using that pipeline. However, if none of--- the shaders in a pipeline statically use any bindings with a particular--- set number, then no descriptor set need be bound for that set number,--- even if the pipeline layout includes a non-trivial descriptor set layout--- for that set number.------ If any of the sets being bound include dynamic uniform or storage--- buffers, then @pDynamicOffsets@ includes one element for each array--- element in each dynamic descriptor type binding in each set. Values are--- taken from @pDynamicOffsets@ in an order such that all entries for set N--- come before set N+1; within a set, entries are ordered by the binding--- numbers in the descriptor set layouts; and within a binding array,--- elements are in order. @dynamicOffsetCount@ /must/ equal the total--- number of dynamic descriptors in the sets being bound.------ The effective offset used for dynamic uniform and storage buffer--- bindings is the sum of the relative offset taken from @pDynamicOffsets@,--- and the base address of the buffer plus base offset in the descriptor--- set. The range of the dynamic uniform and storage buffer bindings is the--- buffer range as specified in the descriptor set.------ Each of the @pDescriptorSets@ /must/ be compatible with the pipeline--- layout specified by @layout@. The layout used to program the bindings--- /must/ also be compatible with the pipeline used in subsequent--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline commands>--- with that pipeline type, as defined in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>--- section.------ The descriptor set contents bound by a call to 'cmdBindDescriptorSets'--- /may/ be consumed at the following times:------ -   For descriptor bindings created with the---     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'---     bit set, the contents /may/ be consumed when the command buffer is---     submitted to a queue, or during shader execution of the resulting---     draws and dispatches, or any time in between. Otherwise,------ -   during host execution of the command, or during shader execution of---     the resulting draws and dispatches, or any time in between.------ Thus, the contents of a descriptor set binding /must/ not be altered--- (overwritten by an update command, or freed) between the first point in--- time that it /may/ be consumed, and when the command completes executing--- on the queue.------ The contents of @pDynamicOffsets@ are consumed immediately during--- execution of 'cmdBindDescriptorSets'. Once all pending uses have--- completed, it is legal to update and reuse a descriptor set.------ == Valid Usage------ -   Each element of @pDescriptorSets@ /must/ have been allocated with a---     'Vulkan.Core10.Handles.DescriptorSetLayout' that matches (is the---     same as, or identically defined as) the---     'Vulkan.Core10.Handles.DescriptorSetLayout' at set /n/ in @layout@,---     where /n/ is the sum of @firstSet@ and the index into---     @pDescriptorSets@------ -   @dynamicOffsetCount@ /must/ be equal to the total number of dynamic---     descriptors in @pDescriptorSets@------ -   The sum of @firstSet@ and @descriptorSetCount@ /must/ be less than---     or equal to---     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@---     provided when @layout@ was created------ -   @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s---     parent 'Vulkan.Core10.Handles.CommandPool'’s queue family------ -   Each element of @pDynamicOffsets@ which corresponds to a descriptor---     binding with type---     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'---     /must/ be a multiple of---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@------ -   Each element of @pDynamicOffsets@ which corresponds to a descriptor---     binding with type---     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'---     /must/ be a multiple of---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@------ -   For each dynamic uniform or storage buffer binding in---     @pDescriptorSets@, the sum of the effective offset, as defined---     above, and the range of the binding /must/ be less than or equal to---     the size of the buffer------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pipelineBindPoint@ /must/ be a valid---     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value------ -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'---     handle------ -   @pDescriptorSets@ /must/ be a valid pointer to an array of---     @descriptorSetCount@ valid 'Vulkan.Core10.Handles.DescriptorSet'---     handles------ -   If @dynamicOffsetCount@ is not @0@, @pDynamicOffsets@ /must/ be a---     valid pointer to an array of @dynamicOffsetCount@ @uint32_t@ values------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   @descriptorSetCount@ /must/ be greater than @0@------ -   Each of @commandBuffer@, @layout@, and the elements of---     @pDescriptorSets@ /must/ have been created, allocated, or retrieved---     from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.DescriptorSet',--- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',--- 'Vulkan.Core10.Handles.PipelineLayout'-cmdBindDescriptorSets :: forall io-                       . (MonadIO io)-                      => -- | @commandBuffer@ is the command buffer that the descriptor sets will be-                         -- bound to.-                         CommandBuffer-                      -> -- | @pipelineBindPoint@ is a-                         -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' indicating the-                         -- type of the pipeline that will use the descriptors. There is a separate-                         -- set of bind points for each pipeline type, so binding one does not-                         -- disturb the others.-                         PipelineBindPoint-                      -> -- | @layout@ is a 'Vulkan.Core10.Handles.PipelineLayout' object used to-                         -- program the bindings.-                         PipelineLayout-                      -> -- | @firstSet@ is the set number of the first descriptor set to be bound.-                         ("firstSet" ::: Word32)-                      -> -- | @pDescriptorSets@ is a pointer to an array of handles to-                         -- 'Vulkan.Core10.Handles.DescriptorSet' objects describing the descriptor-                         -- sets to write to.-                         ("descriptorSets" ::: Vector DescriptorSet)-                      -> -- | @pDynamicOffsets@ is a pointer to an array of @uint32_t@ values-                         -- specifying dynamic offsets.-                         ("dynamicOffsets" ::: Vector Word32)-                      -> io ()-cmdBindDescriptorSets commandBuffer pipelineBindPoint layout firstSet descriptorSets dynamicOffsets = liftIO . evalContT $ do-  let vkCmdBindDescriptorSetsPtr = pVkCmdBindDescriptorSets (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdBindDescriptorSetsPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindDescriptorSets is null" Nothing Nothing-  let vkCmdBindDescriptorSets' = mkVkCmdBindDescriptorSets vkCmdBindDescriptorSetsPtr-  pPDescriptorSets <- ContT $ allocaBytesAligned @DescriptorSet ((Data.Vector.length (descriptorSets)) * 8) 8-  lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorSets `plusPtr` (8 * (i)) :: Ptr DescriptorSet) (e)) (descriptorSets)-  pPDynamicOffsets <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (dynamicOffsets)) * 4) 4-  lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicOffsets `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (dynamicOffsets)-  lift $ vkCmdBindDescriptorSets' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (layout) (firstSet) ((fromIntegral (Data.Vector.length $ (descriptorSets)) :: Word32)) (pPDescriptorSets) ((fromIntegral (Data.Vector.length $ (dynamicOffsets)) :: Word32)) (pPDynamicOffsets)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBindIndexBuffer-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()---- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer------ == Valid Usage------ -   @offset@ /must/ be less than the size of @buffer@------ -   The sum of @offset@ and the address of the range of---     'Vulkan.Core10.Handles.DeviceMemory' object that is backing---     @buffer@, /must/ be a multiple of the type indicated by @indexType@------ -   @buffer@ /must/ have been created with the---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'---     flag------ -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @indexType@ /must/ not be---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'------ -   If @indexType@ is---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-indexTypeUint8 indexTypeUint8>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @indexType@ /must/ be a valid---     'Vulkan.Core10.Enums.IndexType.IndexType' value------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   Both of @buffer@, and @commandBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Enums.IndexType.IndexType'-cmdBindIndexBuffer :: forall io-                    . (MonadIO io)-                   => -- | @commandBuffer@ is the command buffer into which the command is-                      -- recorded.-                      CommandBuffer-                   -> -- | @buffer@ is the buffer being bound.-                      Buffer-                   -> -- | @offset@ is the starting offset in bytes within @buffer@ used in index-                      -- buffer address calculations.-                      ("offset" ::: DeviceSize)-                   -> -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' value-                      -- specifying whether indices are treated as 16 bits or 32 bits.-                      IndexType-                   -> io ()-cmdBindIndexBuffer commandBuffer buffer offset indexType = liftIO $ do-  let vkCmdBindIndexBufferPtr = pVkCmdBindIndexBuffer (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdBindIndexBufferPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindIndexBuffer is null" Nothing Nothing-  let vkCmdBindIndexBuffer' = mkVkCmdBindIndexBuffer vkCmdBindIndexBufferPtr-  vkCmdBindIndexBuffer' (commandBufferHandle (commandBuffer)) (buffer) (offset) (indexType)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBindVertexBuffers-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()---- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer------ = Description------ The values taken from elements i of @pBuffers@ and @pOffsets@ replace--- the current state for the vertex input binding @firstBinding@ + i, for i--- in [0, @bindingCount@). The vertex input binding is updated to start at--- the offset indicated by @pOffsets@[i] from the start of the buffer--- @pBuffers@[i]. All vertex input attributes that use each of these--- bindings will use these updated addresses in their address calculations--- for subsequent draw commands. If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>--- feature is enabled, elements of @pBuffers@ /can/ be--- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and /can/ be used by the--- vertex shader. If a vertex input attribute is bound to a vertex input--- binding that is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the values--- taken from memory are considered to be zero, and missing G, B, or A--- components are--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.------ == Valid Usage------ -   @firstBinding@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@------ -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or---     equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@------ -   All elements of @pOffsets@ /must/ be less than the size of the---     corresponding element in @pBuffers@------ -   All elements of @pBuffers@ /must/ have been created with the---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'---     flag------ -   Each element of @pBuffers@ that is non-sparse /must/ be bound---     completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>---     feature is not enabled, all elements of @pBuffers@ /must/ not be---     'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If an element of @pBuffers@ is---     'Vulkan.Core10.APIConstants.NULL_HANDLE', then the corresponding---     element of @pOffsets@ /must/ be zero------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@---     valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE'---     'Vulkan.Core10.Handles.Buffer' handles------ -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@---     'Vulkan.Core10.FundamentalTypes.DeviceSize' values------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   @bindingCount@ /must/ be greater than @0@------ -   Both of @commandBuffer@, and the elements of @pBuffers@ that are---     valid handles of non-ignored parameters /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdBindVertexBuffers :: forall io-                      . (MonadIO io)-                     => -- | @commandBuffer@ is the command buffer into which the command is-                        -- recorded.-                        CommandBuffer-                     -> -- | @firstBinding@ is the index of the first vertex input binding whose-                        -- state is updated by the command.-                        ("firstBinding" ::: Word32)-                     -> -- | @pBuffers@ is a pointer to an array of buffer handles.-                        ("buffers" ::: Vector Buffer)-                     -> -- | @pOffsets@ is a pointer to an array of buffer offsets.-                        ("offsets" ::: Vector DeviceSize)-                     -> io ()-cmdBindVertexBuffers commandBuffer firstBinding buffers offsets = liftIO . evalContT $ do-  let vkCmdBindVertexBuffersPtr = pVkCmdBindVertexBuffers (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdBindVertexBuffersPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindVertexBuffers is null" Nothing Nothing-  let vkCmdBindVertexBuffers' = mkVkCmdBindVertexBuffers vkCmdBindVertexBuffersPtr-  let pBuffersLength = Data.Vector.length $ (buffers)-  lift $ unless ((Data.Vector.length $ (offsets)) == pBuffersLength) $-    throwIO $ IOError Nothing InvalidArgument "" "pOffsets and pBuffers must have the same length" Nothing Nothing-  pPBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (buffers)) * 8) 8-  lift $ Data.Vector.imapM_ (\i e -> poke (pPBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (buffers)-  pPOffsets <- ContT $ allocaBytesAligned @DeviceSize ((Data.Vector.length (offsets)) * 8) 8-  lift $ Data.Vector.imapM_ (\i e -> poke (pPOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (offsets)-  lift $ vkCmdBindVertexBuffers' (commandBufferHandle (commandBuffer)) (firstBinding) ((fromIntegral pBuffersLength :: Word32)) (pPBuffers) (pPOffsets)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdDraw-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()---- | vkCmdDraw - Draw primitives------ = Description------ When the command is executed, primitives are assembled using the current--- primitive topology and @vertexCount@ consecutive vertex indices with the--- first @vertexIndex@ value equal to @firstVertex@. The primitives are--- drawn @instanceCount@ times with @instanceIndex@ starting with--- @firstInstance@ and increasing sequentially for each instance. The--- assembled primitives execute the bound graphics pipeline.------ == Valid Usage------ -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or---     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and---     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is---     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of---     this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic---     operations as a result of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering, as specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a---     reduction mode of either---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'---     or---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'---     as a result of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering together with minmax filtering, as---     specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.Image' created with a---     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'---     sampled as a result of this command /must/ only be sampled using a---     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of---     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push---     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to---     create the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   Descriptors in each bound descriptor set, specified via---     'cmdBindDescriptorSets', /must/ be valid if they are statically used---     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind---     point used by this command------ -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic------ -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used to sample from any---     'Vulkan.Core10.Handles.Image' with a---     'Vulkan.Core10.Handles.ImageView' of the type---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in---     any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions with---     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions that---     includes a LOD bias or any offset values, in any shader stage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a uniform buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a storage buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects---     created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects---     created with the---     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   The current render pass /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>---     with the @renderPass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set------ -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command------ -   If the draw is recorded in a render pass instance with multiview---     enabled, the maximum instance index /must/ be less than or equal to---     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@------ -   If the bound graphics pipeline was created with---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@---     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass---     has a depth\/stencil attachment, then that attachment /must/ have---     been created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'---     bit set------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     dynamic state enabled, then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ match the---     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@---     of the pipeline------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @scissorCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ match the---     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@---     of the pipeline------ -   If the bound graphics pipeline state was created with both the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic states enabled then both---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     and---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ match the @scissorCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'---     dynamic state enabled, then the bound graphics pipeline /must/ have---     been created with---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'---     dynamic states enabled then the @viewportCount@ parameter in the---     last call to---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'---     /must/ be greater than or equal to the @viewportCount@ parameter in---     the last call to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'---     dynamic state enabled, then the bound graphics pipeline /must/ have---     been created with---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'---     dynamic states enabled then the @viewportCount@ parameter in the---     last call to---     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'---     /must/ be greater than or equal to the @viewportCount@ parameter in---     the last call to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled and an instance of---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'---     chained from @VkPipelineVieportCreateInfo@, then the bound graphics---     pipeline /must/ have been created with---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled and an instance of---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'---     chained from @VkPipelineVieportCreateInfo@, then the bound graphics---     pipeline /must/ have been created with---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'---     dynamic state enabled then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @primitiveTopology@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'---     /must/ be of the same---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>---     as the pipeline---     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@---     state------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>---     limit is not supported, the bound graphics pipeline was created with---     the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, and any of the shader stages of the bound---     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,---     then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ be @1@------ -   If @commandBuffer@ is a protected command buffer, any resource---     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to---     the pipeline bind point used by this command /must/ not be an---     unprotected resource------ -   If @commandBuffer@ is a protected command buffer, pipeline stages---     other than the framebuffer-space and compute stages in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point /must/ not write to any resource------ -   All vertex input bindings accessed via vertex input variables---     declared in the vertex shader entry point’s interface /must/ have---     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers---     bound------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>---     feature is not enabled, all vertex input bindings accessed via---     vertex input variables declared in the vertex shader entry point’s---     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called inside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdDraw :: forall io-         . (MonadIO io)-        => -- | @commandBuffer@ is the command buffer into which the command is-           -- recorded.-           CommandBuffer-        -> -- | @vertexCount@ is the number of vertices to draw.-           ("vertexCount" ::: Word32)-        -> -- | @instanceCount@ is the number of instances to draw.-           ("instanceCount" ::: Word32)-        -> -- | @firstVertex@ is the index of the first vertex to draw.-           ("firstVertex" ::: Word32)-        -> -- | @firstInstance@ is the instance ID of the first instance to draw.-           ("firstInstance" ::: Word32)-        -> io ()-cmdDraw commandBuffer vertexCount instanceCount firstVertex firstInstance = liftIO $ do-  let vkCmdDrawPtr = pVkCmdDraw (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdDrawPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDraw is null" Nothing Nothing-  let vkCmdDraw' = mkVkCmdDraw vkCmdDrawPtr-  vkCmdDraw' (commandBufferHandle (commandBuffer)) (vertexCount) (instanceCount) (firstVertex) (firstInstance)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdDrawIndexed-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()---- | vkCmdDrawIndexed - Issue an indexed draw into a command buffer------ = Description------ When the command is executed, primitives are assembled using the current--- primitive topology and @indexCount@ vertices whose indices are retrieved--- from the index buffer. The index buffer is treated as an array of--- tightly packed unsigned integers of size defined by the--- 'cmdBindIndexBuffer'::@indexType@ parameter with which the buffer was--- bound.------ The first vertex index is at an offset of @firstIndex@ × @indexSize@ +--- @offset@ within the bound index buffer, where @offset@ is the offset--- specified by 'cmdBindIndexBuffer' and @indexSize@ is the byte size of--- the type specified by @indexType@. Subsequent index values are retrieved--- from consecutive locations in the index buffer. Indices are first--- compared to the primitive restart value, then zero extended to 32 bits--- (if the @indexType@ is--- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' or--- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16') and have--- @vertexOffset@ added to them, before being supplied as the @vertexIndex@--- value.------ The primitives are drawn @instanceCount@ times with @instanceIndex@--- starting with @firstInstance@ and increasing sequentially for each--- instance. The assembled primitives execute the bound graphics pipeline.------ == Valid Usage------ -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or---     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and---     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is---     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of---     this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic---     operations as a result of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering, as specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a---     reduction mode of either---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'---     or---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'---     as a result of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering together with minmax filtering, as---     specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.Image' created with a---     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'---     sampled as a result of this command /must/ only be sampled using a---     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of---     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push---     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to---     create the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   Descriptors in each bound descriptor set, specified via---     'cmdBindDescriptorSets', /must/ be valid if they are statically used---     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind---     point used by this command------ -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic------ -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used to sample from any---     'Vulkan.Core10.Handles.Image' with a---     'Vulkan.Core10.Handles.ImageView' of the type---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in---     any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions with---     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions that---     includes a LOD bias or any offset values, in any shader stage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a uniform buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a storage buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects---     created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects---     created with the---     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   The current render pass /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>---     with the @renderPass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set------ -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command------ -   If the draw is recorded in a render pass instance with multiview---     enabled, the maximum instance index /must/ be less than or equal to---     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@------ -   If the bound graphics pipeline was created with---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@---     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass---     has a depth\/stencil attachment, then that attachment /must/ have---     been created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'---     bit set------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     dynamic state enabled, then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ match the---     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@---     of the pipeline------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @scissorCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ match the---     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@---     of the pipeline------ -   If the bound graphics pipeline state was created with both the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic states enabled then both---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     and---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ match the @scissorCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'---     dynamic state enabled, then the bound graphics pipeline /must/ have---     been created with---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'---     dynamic states enabled then the @viewportCount@ parameter in the---     last call to---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'---     /must/ be greater than or equal to the @viewportCount@ parameter in---     the last call to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'---     dynamic state enabled, then the bound graphics pipeline /must/ have---     been created with---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'---     dynamic states enabled then the @viewportCount@ parameter in the---     last call to---     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'---     /must/ be greater than or equal to the @viewportCount@ parameter in---     the last call to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled and an instance of---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'---     chained from @VkPipelineVieportCreateInfo@, then the bound graphics---     pipeline /must/ have been created with---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled and an instance of---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'---     chained from @VkPipelineVieportCreateInfo@, then the bound graphics---     pipeline /must/ have been created with---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'---     dynamic state enabled then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @primitiveTopology@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'---     /must/ be of the same---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>---     as the pipeline---     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@---     state------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>---     limit is not supported, the bound graphics pipeline was created with---     the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, and any of the shader stages of the bound---     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,---     then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ be @1@------ -   If @commandBuffer@ is a protected command buffer, any resource---     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to---     the pipeline bind point used by this command /must/ not be an---     unprotected resource------ -   If @commandBuffer@ is a protected command buffer, pipeline stages---     other than the framebuffer-space and compute stages in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point /must/ not write to any resource------ -   All vertex input bindings accessed via vertex input variables---     declared in the vertex shader entry point’s interface /must/ have---     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers---     bound------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>---     feature is not enabled, all vertex input bindings accessed via---     vertex input variables declared in the vertex shader entry point’s---     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>------ -   (@indexSize@ × (@firstIndex@ + @indexCount@) + @offset@) /must/ be---     less than or equal to the size of the bound index buffer, with---     @indexSize@ being based on the type specified by @indexType@, where---     the index buffer, @indexType@, and @offset@ are specified via---     'cmdBindIndexBuffer'------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called inside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdDrawIndexed :: forall io-                . (MonadIO io)-               => -- | @commandBuffer@ is the command buffer into which the command is-                  -- recorded.-                  CommandBuffer-               -> -- | @indexCount@ is the number of vertices to draw.-                  ("indexCount" ::: Word32)-               -> -- | @instanceCount@ is the number of instances to draw.-                  ("instanceCount" ::: Word32)-               -> -- | @firstIndex@ is the base index within the index buffer.-                  ("firstIndex" ::: Word32)-               -> -- | @vertexOffset@ is the value added to the vertex index before indexing-                  -- into the vertex buffer.-                  ("vertexOffset" ::: Int32)-               -> -- | @firstInstance@ is the instance ID of the first instance to draw.-                  ("firstInstance" ::: Word32)-               -> io ()-cmdDrawIndexed commandBuffer indexCount instanceCount firstIndex vertexOffset firstInstance = liftIO $ do-  let vkCmdDrawIndexedPtr = pVkCmdDrawIndexed (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdDrawIndexedPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexed is null" Nothing Nothing-  let vkCmdDrawIndexed' = mkVkCmdDrawIndexed vkCmdDrawIndexedPtr-  vkCmdDrawIndexed' (commandBufferHandle (commandBuffer)) (indexCount) (instanceCount) (firstIndex) (vertexOffset) (firstInstance)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdDrawIndirect-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()---- | vkCmdDrawIndirect - Issue an indirect draw into a command buffer------ = Description------ 'cmdDrawIndirect' behaves similarly to 'cmdDraw' except that the--- parameters are read by the device from a buffer during execution.--- @drawCount@ draws are executed by the command, with parameters taken--- from @buffer@ starting at @offset@ and increasing by @stride@ bytes for--- each successive draw. The parameters of each draw are encoded in an--- array of 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures. If--- @drawCount@ is less than or equal to one, @stride@ is ignored.------ == Valid Usage------ -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or---     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and---     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is---     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of---     this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic---     operations as a result of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering, as specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a---     reduction mode of either---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'---     or---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'---     as a result of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering together with minmax filtering, as---     specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.Image' created with a---     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'---     sampled as a result of this command /must/ only be sampled using a---     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of---     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push---     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to---     create the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   Descriptors in each bound descriptor set, specified via---     'cmdBindDescriptorSets', /must/ be valid if they are statically used---     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind---     point used by this command------ -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic------ -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used to sample from any---     'Vulkan.Core10.Handles.Image' with a---     'Vulkan.Core10.Handles.ImageView' of the type---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in---     any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions with---     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions that---     includes a LOD bias or any offset values, in any shader stage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a uniform buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a storage buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects---     created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects---     created with the---     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   The current render pass /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>---     with the @renderPass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set------ -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command------ -   If the draw is recorded in a render pass instance with multiview---     enabled, the maximum instance index /must/ be less than or equal to---     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@------ -   If the bound graphics pipeline was created with---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@---     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass---     has a depth\/stencil attachment, then that attachment /must/ have---     been created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'---     bit set------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     dynamic state enabled, then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ match the---     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@---     of the pipeline------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @scissorCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ match the---     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@---     of the pipeline------ -   If the bound graphics pipeline state was created with both the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic states enabled then both---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     and---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ match the @scissorCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'---     dynamic state enabled, then the bound graphics pipeline /must/ have---     been created with---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'---     dynamic states enabled then the @viewportCount@ parameter in the---     last call to---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'---     /must/ be greater than or equal to the @viewportCount@ parameter in---     the last call to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'---     dynamic state enabled, then the bound graphics pipeline /must/ have---     been created with---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'---     dynamic states enabled then the @viewportCount@ parameter in the---     last call to---     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'---     /must/ be greater than or equal to the @viewportCount@ parameter in---     the last call to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled and an instance of---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'---     chained from @VkPipelineVieportCreateInfo@, then the bound graphics---     pipeline /must/ have been created with---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled and an instance of---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'---     chained from @VkPipelineVieportCreateInfo@, then the bound graphics---     pipeline /must/ have been created with---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'---     dynamic state enabled then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @primitiveTopology@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'---     /must/ be of the same---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>---     as the pipeline---     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@---     state------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>---     limit is not supported, the bound graphics pipeline was created with---     the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, and any of the shader stages of the bound---     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,---     then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ be @1@------ -   All vertex input bindings accessed via vertex input variables---     declared in the vertex shader entry point’s interface /must/ have---     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers---     bound------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>---     feature is not enabled, all vertex input bindings accessed via---     vertex input variables declared in the vertex shader entry point’s---     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>------ -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @buffer@ /must/ have been created with the---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'---     bit set------ -   @offset@ /must/ be a multiple of @4@------ -   @commandBuffer@ /must/ not be a protected command buffer------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>---     feature is not enabled, @drawCount@ /must/ be @0@ or @1@------ -   @drawCount@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>---     feature is not enabled, all the @firstInstance@ members of the---     'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures accessed---     by this command /must/ be @0@------ -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of---     @4@ and /must/ be greater than or equal to---     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')------ -   If @drawCount@ is equal to @1@, (@offset@ +---     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be---     less than or equal to the size of @buffer@------ -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +---     @offset@ + @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand'))---     /must/ be less than or equal to the size of @buffer@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called inside of a render pass instance------ -   Both of @buffer@, and @commandBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdDrawIndirect :: forall io-                 . (MonadIO io)-                => -- | @commandBuffer@ is the command buffer into which the command is-                   -- recorded.-                   CommandBuffer-                -> -- | @buffer@ is the buffer containing draw parameters.-                   Buffer-                -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.-                   ("offset" ::: DeviceSize)-                -> -- | @drawCount@ is the number of draws to execute, and /can/ be zero.-                   ("drawCount" ::: Word32)-                -> -- | @stride@ is the byte stride between successive sets of draw parameters.-                   ("stride" ::: Word32)-                -> io ()-cmdDrawIndirect commandBuffer buffer offset drawCount stride = liftIO $ do-  let vkCmdDrawIndirectPtr = pVkCmdDrawIndirect (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdDrawIndirectPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndirect is null" Nothing Nothing-  let vkCmdDrawIndirect' = mkVkCmdDrawIndirect vkCmdDrawIndirectPtr-  vkCmdDrawIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdDrawIndexedIndirect-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()---- | vkCmdDrawIndexedIndirect - Perform an indexed indirect draw------ = Description------ 'cmdDrawIndexedIndirect' behaves similarly to 'cmdDrawIndexed' except--- that the parameters are read by the device from a buffer during--- execution. @drawCount@ draws are executed by the command, with--- parameters taken from @buffer@ starting at @offset@ and increasing by--- @stride@ bytes for each successive draw. The parameters of each draw are--- encoded in an array of--- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures. If--- @drawCount@ is less than or equal to one, @stride@ is ignored.------ == Valid Usage------ -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or---     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and---     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is---     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of---     this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic---     operations as a result of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering, as specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a---     reduction mode of either---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'---     or---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'---     as a result of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering together with minmax filtering, as---     specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.Image' created with a---     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'---     sampled as a result of this command /must/ only be sampled using a---     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of---     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push---     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to---     create the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   Descriptors in each bound descriptor set, specified via---     'cmdBindDescriptorSets', /must/ be valid if they are statically used---     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind---     point used by this command------ -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic------ -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used to sample from any---     'Vulkan.Core10.Handles.Image' with a---     'Vulkan.Core10.Handles.ImageView' of the type---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in---     any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions with---     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions that---     includes a LOD bias or any offset values, in any shader stage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a uniform buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a storage buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects---     created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects---     created with the---     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   The current render pass /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>---     with the @renderPass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to---     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'------ -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set------ -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command------ -   If the draw is recorded in a render pass instance with multiview---     enabled, the maximum instance index /must/ be less than or equal to---     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@------ -   If the bound graphics pipeline was created with---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@---     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass---     has a depth\/stencil attachment, then that attachment /must/ have---     been created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'---     bit set------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     dynamic state enabled, then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ match the---     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@---     of the pipeline------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @scissorCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ match the---     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@---     of the pipeline------ -   If the bound graphics pipeline state was created with both the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic states enabled then both---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     and---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ match the @scissorCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'---     dynamic state enabled, then the bound graphics pipeline /must/ have---     been created with---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'---     dynamic states enabled then the @viewportCount@ parameter in the---     last call to---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'---     /must/ be greater than or equal to the @viewportCount@ parameter in---     the last call to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, but not the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'---     dynamic state enabled, then the bound graphics pipeline /must/ have---     been created with---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'---     dynamic states enabled then the @viewportCount@ parameter in the---     last call to---     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'---     /must/ be greater than or equal to the @viewportCount@ parameter in---     the last call to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled and an instance of---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'---     chained from @VkPipelineVieportCreateInfo@, then the bound graphics---     pipeline /must/ have been created with---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled and an instance of---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'---     chained from @VkPipelineVieportCreateInfo@, then the bound graphics---     pipeline /must/ have been created with---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@---     greater or equal to the @viewportCount@ parameter in the last call---     to---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'------ -   If the bound graphics pipeline state was created with the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'---     dynamic state enabled then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @primitiveTopology@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'---     /must/ be of the same---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>---     as the pipeline---     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@---     state------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>---     limit is not supported, the bound graphics pipeline was created with---     the---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     dynamic state enabled, and any of the shader stages of the bound---     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,---     then---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ have been called in the current command buffer prior to this---     draw command, and the @viewportCount@ parameter of---     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'---     /must/ be @1@------ -   All vertex input bindings accessed via vertex input variables---     declared in the vertex shader entry point’s interface /must/ have---     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers---     bound------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>---     feature is not enabled, all vertex input bindings accessed via---     vertex input variables declared in the vertex shader entry point’s---     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>------ -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @buffer@ /must/ have been created with the---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'---     bit set------ -   @offset@ /must/ be a multiple of @4@------ -   @commandBuffer@ /must/ not be a protected command buffer------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>---     feature is not enabled, @drawCount@ /must/ be @0@ or @1@------ -   @drawCount@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@------ -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of---     @4@ and /must/ be greater than or equal to---     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>---     feature is not enabled, all the @firstInstance@ members of the---     'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures---     accessed by this command /must/ be @0@------ -   If @drawCount@ is equal to @1@, (@offset@ +---     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))---     /must/ be less than or equal to the size of @buffer@------ -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +---     @offset@ +---     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))---     /must/ be less than or equal to the size of @buffer@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called inside of a render pass instance------ -   Both of @buffer@, and @commandBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdDrawIndexedIndirect :: forall io-                        . (MonadIO io)-                       => -- | @commandBuffer@ is the command buffer into which the command is-                          -- recorded.-                          CommandBuffer-                       -> -- | @buffer@ is the buffer containing draw parameters.-                          Buffer-                       -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.-                          ("offset" ::: DeviceSize)-                       -> -- | @drawCount@ is the number of draws to execute, and /can/ be zero.-                          ("drawCount" ::: Word32)-                       -> -- | @stride@ is the byte stride between successive sets of draw parameters.-                          ("stride" ::: Word32)-                       -> io ()-cmdDrawIndexedIndirect commandBuffer buffer offset drawCount stride = liftIO $ do-  let vkCmdDrawIndexedIndirectPtr = pVkCmdDrawIndexedIndirect (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdDrawIndexedIndirectPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexedIndirect is null" Nothing Nothing-  let vkCmdDrawIndexedIndirect' = mkVkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirectPtr-  vkCmdDrawIndexedIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdDispatch-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()---- | vkCmdDispatch - Dispatch compute work items------ = Description------ When the command is executed, a global workgroup consisting of--- @groupCountX@ × @groupCountY@ × @groupCountZ@ local workgroups is--- assembled.------ == Valid Usage------ -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or---     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and---     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is---     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of---     this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic---     operations as a result of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering, as specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a---     reduction mode of either---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'---     or---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'---     as a result of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering together with minmax filtering, as---     specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.Image' created with a---     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'---     sampled as a result of this command /must/ only be sampled using a---     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of---     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push---     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to---     create the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   Descriptors in each bound descriptor set, specified via---     'cmdBindDescriptorSets', /must/ be valid if they are statically used---     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind---     point used by this command------ -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic------ -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used to sample from any---     'Vulkan.Core10.Handles.Image' with a---     'Vulkan.Core10.Handles.ImageView' of the type---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in---     any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions with---     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions that---     includes a LOD bias or any offset values, in any shader stage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a uniform buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a storage buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects---     created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects---     created with the---     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If @commandBuffer@ is a protected command buffer, any resource---     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to---     the pipeline bind point used by this command /must/ not be an---     unprotected resource------ -   If @commandBuffer@ is a protected command buffer, pipeline stages---     other than the framebuffer-space and compute stages in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point /must/ not write to any resource------ -   @groupCountX@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]------ -   @groupCountY@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]------ -   @groupCountZ@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               | Compute                                                                                                                             |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdDispatch :: forall io-             . (MonadIO io)-            => -- | @commandBuffer@ is the command buffer into which the command will be-               -- recorded.-               CommandBuffer-            -> -- | @groupCountX@ is the number of local workgroups to dispatch in the X-               -- dimension.-               ("groupCountX" ::: Word32)-            -> -- | @groupCountY@ is the number of local workgroups to dispatch in the Y-               -- dimension.-               ("groupCountY" ::: Word32)-            -> -- | @groupCountZ@ is the number of local workgroups to dispatch in the Z-               -- dimension.-               ("groupCountZ" ::: Word32)-            -> io ()-cmdDispatch commandBuffer groupCountX groupCountY groupCountZ = liftIO $ do-  let vkCmdDispatchPtr = pVkCmdDispatch (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdDispatchPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatch is null" Nothing Nothing-  let vkCmdDispatch' = mkVkCmdDispatch vkCmdDispatchPtr-  vkCmdDispatch' (commandBufferHandle (commandBuffer)) (groupCountX) (groupCountY) (groupCountZ)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdDispatchIndirect-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()---- | vkCmdDispatchIndirect - Dispatch compute work items using indirect--- parameters------ = Description------ 'cmdDispatchIndirect' behaves similarly to 'cmdDispatch' except that the--- parameters are read by the device from a buffer during execution. The--- parameters of the dispatch are encoded in a--- 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand' structure taken from--- @buffer@ starting at @offset@.------ == Valid Usage------ -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or---     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and---     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is---     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of---     this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic---     operations as a result of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering, as specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a---     reduction mode of either---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'---     or---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'---     as a result of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering together with minmax filtering, as---     specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.Image' created with a---     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'---     sampled as a result of this command /must/ only be sampled using a---     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of---     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push---     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to---     create the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   Descriptors in each bound descriptor set, specified via---     'cmdBindDescriptorSets', /must/ be valid if they are statically used---     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind---     point used by this command------ -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic------ -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used to sample from any---     'Vulkan.Core10.Handles.Image' with a---     'Vulkan.Core10.Handles.ImageView' of the type---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in---     any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions with---     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions that---     includes a LOD bias or any offset values, in any shader stage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a uniform buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a storage buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects---     created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects---     created with the---     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @buffer@ /must/ have been created with the---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'---     bit set------ -   @offset@ /must/ be a multiple of @4@------ -   @commandBuffer@ /must/ not be a protected command buffer------ -   The sum of @offset@ and the size of---     'Vulkan.Core10.OtherTypes.DispatchIndirectCommand' /must/ be less---     than or equal to the size of @buffer@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   Both of @buffer@, and @commandBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               | Compute                                                                                                                             |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdDispatchIndirect :: forall io-                     . (MonadIO io)-                    => -- | @commandBuffer@ is the command buffer into which the command will be-                       -- recorded.-                       CommandBuffer-                    -> -- | @buffer@ is the buffer containing dispatch parameters.-                       Buffer-                    -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.-                       ("offset" ::: DeviceSize)-                    -> io ()-cmdDispatchIndirect commandBuffer buffer offset = liftIO $ do-  let vkCmdDispatchIndirectPtr = pVkCmdDispatchIndirect (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdDispatchIndirectPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatchIndirect is null" Nothing Nothing-  let vkCmdDispatchIndirect' = mkVkCmdDispatchIndirect vkCmdDispatchIndirectPtr-  vkCmdDispatchIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyBuffer-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()---- | vkCmdCopyBuffer - Copy data between buffer regions------ = Description------ Each region in @pRegions@ is copied from the source buffer to the same--- region of the destination buffer. @srcBuffer@ and @dstBuffer@ /can/ be--- the same buffer or alias the same memory, but the resulting values are--- undefined if the copy regions overlap in memory.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then---     @srcBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is an unprotected command buffer, then---     @dstBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@---     /must/ not be an unprotected buffer------ -   The @srcOffset@ member of each element of @pRegions@ /must/ be less---     than the size of @srcBuffer@------ -   The @dstOffset@ member of each element of @pRegions@ /must/ be less---     than the size of @dstBuffer@------ -   The @size@ member of each element of @pRegions@ /must/ be less than---     or equal to the size of @srcBuffer@ minus @srcOffset@------ -   The @size@ member of each element of @pRegions@ /must/ be less than---     or equal to the size of @dstBuffer@ minus @dstOffset@------ -   The union of the source regions, and the union of the destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   @srcBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @srcBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'BufferCopy' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ -   @regionCount@ /must/ be greater than @0@------ -   Each of @commandBuffer@, @dstBuffer@, and @srcBuffer@ /must/ have---     been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'BufferCopy',--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdCopyBuffer :: forall io-               . (MonadIO io)-              => -- | @commandBuffer@ is the command buffer into which the command will be-                 -- recorded.-                 CommandBuffer-              -> -- | @srcBuffer@ is the source buffer.-                 ("srcBuffer" ::: Buffer)-              -> -- | @dstBuffer@ is the destination buffer.-                 ("dstBuffer" ::: Buffer)-              -> -- | @pRegions@ is a pointer to an array of 'BufferCopy' structures-                 -- specifying the regions to copy.-                 ("regions" ::: Vector BufferCopy)-              -> io ()-cmdCopyBuffer commandBuffer srcBuffer dstBuffer regions = liftIO . evalContT $ do-  let vkCmdCopyBufferPtr = pVkCmdCopyBuffer (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyBufferPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBuffer is null" Nothing Nothing-  let vkCmdCopyBuffer' = mkVkCmdCopyBuffer vkCmdCopyBufferPtr-  pPRegions <- ContT $ allocaBytesAligned @BufferCopy ((Data.Vector.length (regions)) * 24) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (24 * (i)) :: Ptr BufferCopy) (e) . ($ ())) (regions)-  lift $ vkCmdCopyBuffer' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyImage-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()---- | vkCmdCopyImage - Copy data between images------ = Description------ Each region in @pRegions@ is copied from the source image to the same--- region of the destination image. @srcImage@ and @dstImage@ /can/ be the--- same image or alias the same memory.------ The formats of @srcImage@ and @dstImage@ /must/ be compatible. Formats--- are compatible if they share the same class, as shown in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats>--- table. Depth\/stencil formats /must/ match exactly.------ If the format of @srcImage@ or @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,--- regions of each plane to be copied /must/ be specified separately using--- the @srcSubresource@ and @dstSubresource@ members of the 'ImageCopy'--- structure. In this case, the @aspectMask@ of the @srcSubresource@ or--- @dstSubresource@ that refers to the multi-planar image /must/ be--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For--- the purposes of 'cmdCopyImage', each plane of a multi-planar image is--- treated as having the format listed in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>--- for the plane identified by the @aspectMask@ of the corresponding--- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'--- and to coordinates used in the copy, which correspond to texels in the--- /plane/ rather than how these texels map to coordinates in the image as--- a whole.------ Note------ For example, the--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' plane--- of a 'Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM' image--- is compatible with an image of format--- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM' and (less usefully) with--- the 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'--- plane of an image of format--- 'Vulkan.Core10.Enums.Format.FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16',--- as each texel is 2 bytes in size.------ 'cmdCopyImage' allows copying between /size-compatible/ compressed and--- uncompressed internal formats. Formats are size-compatible if the texel--- block size of the uncompressed format is equal to the texel block size--- of the compressed format. Such a copy does not perform on-the-fly--- compression or decompression. When copying from an uncompressed format--- to a compressed format, each texel of uncompressed data of the source--- image is copied as a raw value to the corresponding compressed texel--- block of the destination image. When copying from a compressed format to--- an uncompressed format, each compressed texel block of the source image--- is copied as a raw value to the corresponding texel of uncompressed data--- in the destination image. Thus, for example, it is legal to copy between--- a 128-bit uncompressed format and a compressed format which has a--- 128-bit sized compressed texel block representing 4×4 texels (using 8--- bits per texel), or between a 64-bit uncompressed format and a--- compressed format which has a 64-bit sized compressed texel block--- representing 4×4 texels (using 4 bits per texel).------ When copying between compressed and uncompressed formats the @extent@--- members represent the texel dimensions of the source image and not the--- destination. When copying from a compressed image to an uncompressed--- image the image texel dimensions written to the uncompressed image will--- be source extent divided by the compressed texel block dimensions. When--- copying from an uncompressed image to a compressed image the image texel--- dimensions written to the compressed image will be the source extent--- multiplied by the compressed texel block dimensions. In both cases the--- number of bytes read and the number of bytes written will be identical.------ Copying to or from block-compressed images is typically done in--- multiples of the compressed texel block size. For this reason the--- @extent@ /must/ be a multiple of the compressed texel block dimension.--- There is one exception to this rule which is /required/ to handle--- compressed images created with dimensions that are not a multiple of the--- compressed texel block dimensions: if the @srcImage@ is compressed,--- then:------ -   If @extent.width@ is not a multiple of the compressed texel block---     width, then (@extent.width@ + @srcOffset.x@) /must/ equal the image---     subresource width.------ -   If @extent.height@ is not a multiple of the compressed texel block---     height, then (@extent.height@ + @srcOffset.y@) /must/ equal the---     image subresource height.------ -   If @extent.depth@ is not a multiple of the compressed texel block---     depth, then (@extent.depth@ + @srcOffset.z@) /must/ equal the image---     subresource depth.------ Similarly, if the @dstImage@ is compressed, then:------ -   If @extent.width@ is not a multiple of the compressed texel block---     width, then (@extent.width@ + @dstOffset.x@) /must/ equal the image---     subresource width.------ -   If @extent.height@ is not a multiple of the compressed texel block---     height, then (@extent.height@ + @dstOffset.y@) /must/ equal the---     image subresource height.------ -   If @extent.depth@ is not a multiple of the compressed texel block---     depth, then (@extent.depth@ + @dstOffset.z@) /must/ equal the image---     subresource depth.------ This allows the last compressed texel block of the image in each--- non-multiple dimension to be included as a source or destination of the--- copy.------ “@_422@” image formats that are not--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>--- are treated as having a 2×1 compressed texel block for the purposes of--- these rules.------ 'cmdCopyImage' /can/ be used to copy image data between multisample--- images, but both images /must/ have the same number of samples.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @dstImage@---     /must/ not be an unprotected image------ -   The union of all source regions, and the union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'------ -   @srcImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   If @srcImage@ is non-sparse then the image or /disjoint/ plane to be---     copied /must/ be bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   @srcImageLayout@ /must/ specify the layout of the image subresources---     of @srcImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @srcImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @dstImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ -   @dstImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstImage@ is non-sparse then the image or /disjoint/ plane that---     is the destination of the copy /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImageLayout@ /must/ specify the layout of the image subresources---     of @dstImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @dstImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   If the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and---     @dstImage@ is not a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and---     @dstImage@ /must/ be compatible, as defined---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>------ -   In a copy to or from a plane of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,---     the 'Vulkan.Core10.Enums.Format.Format' of the image and plane---     /must/ be compatible according to---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>---     for the plane being copied------ -   The sample count of @srcImage@ and @dstImage@ /must/ match------ -   The @srcSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @dstSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @srcImage@ was created------ -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @dstImage@ was created------ -   The @srcOffset@ and @extent@ members of each element of @pRegions@---     /must/ respect the image transfer granularity requirements of---     @commandBuffer@’s command pool’s queue family, as described in---     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ -   The @dstOffset@ and @extent@ members of each element of @pRegions@---     /must/ respect the image transfer granularity requirements of---     @commandBuffer@’s command pool’s queue family, as described in---     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@---     containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If neither @srcImage@ nor @dstImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>---     then for each element of @pRegions@, @srcSubresource.aspectMask@ and---     @dstSubresource.aspectMask@ /must/ match------ -   If @srcImage@ has a 'Vulkan.Core10.Enums.Format.Format' with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>---     then for each element of @pRegions@, @srcSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'------ -   If @srcImage@ has a 'Vulkan.Core10.Enums.Format.Format' with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>---     then for each element of @pRegions@, @srcSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'------ -   If @dstImage@ has a 'Vulkan.Core10.Enums.Format.Format' with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>---     then for each element of @pRegions@, @dstSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'------ -   If @dstImage@ has a 'Vulkan.Core10.Enums.Format.Format' with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>---     then for each element of @pRegions@, @dstSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'------ -   If @srcImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>---     and the @dstImage@ does not have a multi-planar image format, then---     for each element of @pRegions@, @dstSubresource.aspectMask@ /must/---     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ -   If @dstImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>---     and the @srcImage@ does not have a multi-planar image format, then---     for each element of @pRegions@, @srcSubresource.aspectMask@ /must/---     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and and---     @srcSubresource.layerCount@ /must/ be @1@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and and---     @dstSubresource.layerCount@ /must/ be @1@------ -   For each element of @pRegions@, @srcSubresource.aspectMask@ /must/---     specify aspects present in @srcImage@------ -   For each element of @pRegions@, @dstSubresource.aspectMask@ /must/---     specify aspects present in @dstImage@------ -   For each element of @pRegions@, @srcOffset.x@ and (@extent.width@ +---     @srcOffset.x@) /must/ both be greater than or equal to @0@ and less---     than or equal to the width of the specified @srcSubresource@ of---     @srcImage@------ -   For each element of @pRegions@, @srcOffset.y@ and (@extent.height@ +---     @srcOffset.y@) /must/ both be greater than or equal to @0@ and less---     than or equal to the height of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@---     /must/ be @1@------ -   For each element of @pRegions@, @srcOffset.z@ and (@extent.depth@ +---     @srcOffset.z@) /must/ both be greater than or equal to @0@ and less---     than or equal to the depth of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/---     be @1@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/---     be @1@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @srcOffset.z@ /must/ be @0@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @dstOffset.z@ /must/ be @0@------ -   If @srcImage@ and @dstImage@ are both of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @extent.depth@ /must/ be @1@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @dstImage@ is of---     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each---     element of @pRegions@, @extent.depth@ /must/ equal---     @srcSubresource.layerCount@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @srcImage@ is of---     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each---     element of @pRegions@, @extent.depth@ /must/ equal---     @dstSubresource.layerCount@------ -   For each element of @pRegions@, @dstOffset.x@ and (@extent.width@ +---     @dstOffset.x@) /must/ both be greater than or equal to @0@ and less---     than or equal to the width of the specified @dstSubresource@ of---     @dstImage@------ -   For each element of @pRegions@, @dstOffset.y@ and (@extent.height@ +---     @dstOffset.y@) /must/ both be greater than or equal to @0@ and less---     than or equal to the height of the specified @dstSubresource@ of---     @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@---     /must/ be @1@------ -   For each element of @pRegions@, @dstOffset.z@ and (@extent.depth@ +---     @dstOffset.z@) /must/ both be greater than or equal to @0@ and less---     than or equal to the depth of the specified @dstSubresource@ of---     @dstImage@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, all members of @srcOffset@---     /must/ be a multiple of the corresponding dimensions of the---     compressed texel block------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.width@ /must/ be a---     multiple of the compressed texel block width or (@extent.width@ +---     @srcOffset.x@) /must/ equal the width of the specified---     @srcSubresource@ of @srcImage@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.height@ /must/ be a---     multiple of the compressed texel block height or (@extent.height@ +---     @srcOffset.y@) /must/ equal the height of the specified---     @srcSubresource@ of @srcImage@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.depth@ /must/ be a---     multiple of the compressed texel block depth or (@extent.depth@ +---     @srcOffset.z@) /must/ equal the depth of the specified---     @srcSubresource@ of @srcImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, all members of @dstOffset@---     /must/ be a multiple of the corresponding dimensions of the---     compressed texel block------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.width@ /must/ be a---     multiple of the compressed texel block width or (@extent.width@ +---     @dstOffset.x@) /must/ equal the width of the specified---     @dstSubresource@ of @dstImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.height@ /must/ be a---     multiple of the compressed texel block height or (@extent.height@ +---     @dstOffset.y@) /must/ equal the height of the specified---     @dstSubresource@ of @dstImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.depth@ /must/ be a---     multiple of the compressed texel block depth or (@extent.depth@ +---     @dstOffset.z@) /must/ equal the depth of the specified---     @dstSubresource@ of @dstImage@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @srcImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @dstImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'ImageCopy' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ -   @regionCount@ /must/ be greater than @0@------ -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',--- 'ImageCopy', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'-cmdCopyImage :: forall io-              . (MonadIO io)-             => -- | @commandBuffer@ is the command buffer into which the command will be-                -- recorded.-                CommandBuffer-             -> -- | @srcImage@ is the source image.-                ("srcImage" ::: Image)-             -> -- | @srcImageLayout@ is the current layout of the source image subresource.-                ("srcImageLayout" ::: ImageLayout)-             -> -- | @dstImage@ is the destination image.-                ("dstImage" ::: Image)-             -> -- | @dstImageLayout@ is the current layout of the destination image-                -- subresource.-                ("dstImageLayout" ::: ImageLayout)-             -> -- | @pRegions@ is a pointer to an array of 'ImageCopy' structures specifying-                -- the regions to copy.-                ("regions" ::: Vector ImageCopy)-             -> io ()-cmdCopyImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do-  let vkCmdCopyImagePtr = pVkCmdCopyImage (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyImagePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImage is null" Nothing Nothing-  let vkCmdCopyImage' = mkVkCmdCopyImage vkCmdCopyImagePtr-  pPRegions <- ContT $ allocaBytesAligned @ImageCopy ((Data.Vector.length (regions)) * 68) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageCopy) (e) . ($ ())) (regions)-  lift $ vkCmdCopyImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBlitImage-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()---- | vkCmdBlitImage - Copy regions of an image, potentially performing format--- conversion,------ = Description------ 'cmdBlitImage' /must/ not be used for multisampled source or destination--- images. Use 'cmdResolveImage' for this purpose.------ As the sizes of the source and destination extents /can/ differ in any--- dimension, texels in the source extent are scaled and filtered to the--- destination extent. Scaling occurs via the following operations:------ -   For each destination texel, the integer coordinate of that texel is---     converted to an unnormalized texture coordinate, using the effective---     inverse of the equations described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-unnormalized-to-integer unnormalized to integer conversion>:------     -   ubase = i + ½------     -   vbase = j + ½------     -   wbase = k + ½------ -   These base coordinates are then offset by the first destination---     offset:------     -   uoffset = ubase - xdst0------     -   voffset = vbase - ydst0------     -   woffset = wbase - zdst0------     -   aoffset = a - @baseArrayCount@dst------ -   The scale is determined from the source and destination regions, and---     applied to the offset coordinates:------     -   scaleu = (xsrc1 - xsrc0) \/ (xdst1 - xdst0)------     -   scalev = (ysrc1 - ysrc0) \/ (ydst1 - ydst0)------     -   scalew = (zsrc1 - zsrc0) \/ (zdst1 - zdst0)------     -   uscaled = uoffset × scaleu------     -   vscaled = voffset × scalev------     -   wscaled = woffset × scalew------ -   Finally the source offset is added to the scaled coordinates, to---     determine the final unnormalized coordinates used to sample from---     @srcImage@:------     -   u = uscaled + xsrc0------     -   v = vscaled + ysrc0------     -   w = wscaled + zsrc0------     -   q = @mipLevel@------     -   a = aoffset + @baseArrayCount@src------ These coordinates are used to sample from the source image, as described--- in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations chapter>,--- with the filter mode equal to that of @filter@, a mipmap mode of--- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST' and--- an address mode of--- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'.--- Implementations /must/ clamp at the edge of the source image, and /may/--- additionally clamp to the edge of the source region.------ Note------ Due to allowable rounding errors in the generation of the source texture--- coordinates, it is not always possible to guarantee exactly which source--- texels will be sampled for a given blit. As rounding errors are--- implementation dependent, the exact results of a blitting operation are--- also implementation dependent.------ Blits are done layer by layer starting with the @baseArrayLayer@ member--- of @srcSubresource@ for the source and @dstSubresource@ for the--- destination. @layerCount@ layers are blitted to the destination image.------ When blitting 3D textures, slices in the destination region bounded by--- @dstOffsets@[0].z and @dstOffsets@[1].z are sampled from slices in the--- source region bounded by @srcOffsets@[0].z and @srcOffsets@[1].z. If the--- @filter@ parameter is 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' then--- the value sampled from the source image is taken by doing linear--- filtering using the interpolated __z__ coordinate represented by __w__--- in the previous equations. If the @filter@ parameter is--- 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST' then the value sampled from--- the source image is taken from the single nearest slice, with an--- implementation-dependent arithmetic rounding mode.------ The following filtering and conversion rules apply:------ -   Integer formats /can/ only be converted to other integer formats---     with the same signedness.------ -   No format conversion is supported between depth\/stencil images. The---     formats /must/ match.------ -   Format conversions on unorm, snorm, unscaled and packed float---     formats of the copied aspect of the image are performed by first---     converting the pixels to float values.------ -   For sRGB source formats, nonlinear RGB values are converted to---     linear representation prior to filtering.------ -   After filtering, the float values are first clamped and then cast to---     the destination image format. In case of sRGB destination format,---     linear RGB values are converted to nonlinear representation before---     writing the pixel to the image.------ Signed and unsigned integers are converted by first clamping to the--- representable range of the destination format, then casting the value.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @dstImage@---     /must/ not be an unprotected image------ -   The source region specified by each element of @pRegions@ /must/ be---     a region that is contained within @srcImage@------ -   The destination region specified by each element of @pRegions@---     /must/ be a region that is contained within @dstImage@------ -   The union of all destination regions, specified by the elements of---     @pRegions@, /must/ not overlap in memory with any texel that /may/---     be sampled during the blit operation------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'------ -   @srcImage@ /must/ not use a format listed in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>------ -   @srcImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   If @srcImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @srcImageLayout@ /must/ specify the layout of the image subresources---     of @srcImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @srcImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @dstImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'------ -   @dstImage@ /must/ not use a format listed in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>------ -   @dstImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImageLayout@ /must/ specify the layout of the image subresources---     of @dstImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @dstImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   If either of @srcImage@ or @dstImage@ was created with a signed---     integer 'Vulkan.Core10.Enums.Format.Format', the other /must/ also---     have been created with a signed integer---     'Vulkan.Core10.Enums.Format.Format'------ -   If either of @srcImage@ or @dstImage@ was created with an unsigned---     integer 'Vulkan.Core10.Enums.Format.Format', the other /must/ also---     have been created with an unsigned integer---     'Vulkan.Core10.Enums.Format.Format'------ -   If either of @srcImage@ or @dstImage@ was created with a---     depth\/stencil format, the other /must/ have exactly the same format------ -   If @srcImage@ was created with a depth\/stencil format, @filter@---     /must/ be 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST'------ -   @srcImage@ /must/ have been created with a @samples@ value of---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   @dstImage@ /must/ have been created with a @samples@ value of---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   If @filter@ is 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', then the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If @filter@ is---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', then the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   If @filter@ is---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', @srcImage@---     /must/ be of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'------ -   The @srcSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @dstSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @srcImage@ was created------ -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @dstImage@ was created------ -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@---     containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If either @srcImage@ or @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @srcSubresource.baseArrayLayer@ and---     @dstSubresource.baseArrayLayer@ /must/ each be @0@, and---     @srcSubresource.layerCount@ and @dstSubresource.layerCount@ /must/---     each be @1@.------ -   For each element of @pRegions@, @srcSubresource.aspectMask@ /must/---     specify aspects present in @srcImage@------ -   For each element of @pRegions@, @dstSubresource.aspectMask@ /must/---     specify aspects present in @dstImage@------ -   For each element of @pRegions@, @srcOffset@[0].x and---     @srcOffset@[1].x /must/ both be greater than or equal to @0@ and---     less than or equal to the width of the specified @srcSubresource@ of---     @srcImage@------ -   For each element of @pRegions@, @srcOffset@[0].y and---     @srcOffset@[1].y /must/ both be greater than or equal to @0@ and---     less than or equal to the height of the specified @srcSubresource@---     of @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @srcOffset@[0].y /must/ be @0@ and @srcOffset@[1].y---     /must/ be @1@------ -   For each element of @pRegions@, @srcOffset@[0].z and---     @srcOffset@[1].z /must/ both be greater than or equal to @0@ and---     less than or equal to the depth of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @srcOffset@[0].z /must/ be @0@ and @srcOffset@[1].z---     /must/ be @1@------ -   For each element of @pRegions@, @dstOffset@[0].x and---     @dstOffset@[1].x /must/ both be greater than or equal to @0@ and---     less than or equal to the width of the specified @dstSubresource@ of---     @dstImage@------ -   For each element of @pRegions@, @dstOffset@[0].y and---     @dstOffset@[1].y /must/ both be greater than or equal to @0@ and---     less than or equal to the height of the specified @dstSubresource@---     of @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @dstOffset@[0].y /must/ be @0@ and @dstOffset@[1].y---     /must/ be @1@------ -   For each element of @pRegions@, @dstOffset@[0].z and---     @dstOffset@[1].z /must/ both be greater than or equal to @0@ and---     less than or equal to the depth of the specified @dstSubresource@ of---     @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @dstOffset@[0].z /must/ be @0@ and @dstOffset@[1].z---     /must/ be @1@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @srcImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @dstImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'ImageBlit' structures------ -   @filter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter' value------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called outside of a render pass instance------ -   @regionCount@ /must/ be greater than @0@------ -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.Filter.Filter', 'Vulkan.Core10.Handles.Image',--- 'ImageBlit', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'-cmdBlitImage :: forall io-              . (MonadIO io)-             => -- | @commandBuffer@ is the command buffer into which the command will be-                -- recorded.-                CommandBuffer-             -> -- | @srcImage@ is the source image.-                ("srcImage" ::: Image)-             -> -- | @srcImageLayout@ is the layout of the source image subresources for the-                -- blit.-                ("srcImageLayout" ::: ImageLayout)-             -> -- | @dstImage@ is the destination image.-                ("dstImage" ::: Image)-             -> -- | @dstImageLayout@ is the layout of the destination image subresources for-                -- the blit.-                ("dstImageLayout" ::: ImageLayout)-             -> -- | @pRegions@ is a pointer to an array of 'ImageBlit' structures specifying-                -- the regions to blit.-                ("regions" ::: Vector ImageBlit)-             -> -- | @filter@ is a 'Vulkan.Core10.Enums.Filter.Filter' specifying the filter-                -- to apply if the blits require scaling.-                Filter-             -> io ()-cmdBlitImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions filter' = liftIO . evalContT $ do-  let vkCmdBlitImagePtr = pVkCmdBlitImage (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdBlitImagePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBlitImage is null" Nothing Nothing-  let vkCmdBlitImage' = mkVkCmdBlitImage vkCmdBlitImagePtr-  pPRegions <- ContT $ allocaBytesAligned @ImageBlit ((Data.Vector.length (regions)) * 80) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (80 * (i)) :: Ptr ImageBlit) (e) . ($ ())) (regions)-  lift $ vkCmdBlitImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions) (filter')-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyBufferToImage-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()---- | vkCmdCopyBufferToImage - Copy data from a buffer into an image------ = Description------ Each region in @pRegions@ is copied from the specified region of the--- source buffer to the specified region of the destination image.------ If the format of @dstImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,--- regions of each plane to be a target of a copy /must/ be specified--- separately using the @pRegions@ member of the 'BufferImageCopy'--- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/--- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For--- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar--- image is treated as having the format listed in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>--- for the plane identified by the @aspectMask@ of the corresponding--- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'--- and to coordinates used in the copy, which correspond to texels in the--- /plane/ rather than how these texels map to coordinates in the image as--- a whole.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then---     @srcBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @dstImage@---     /must/ not be an unprotected image------ -   The image region specified by each element of @pRegions@ /must/ be a---     region that is contained within @dstImage@ if the @dstImage@’s---     'Vulkan.Core10.Enums.Format.Format' is not a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     and /must/ be a region that is contained within the plane being---     copied to if the @dstImage@’s 'Vulkan.Core10.Enums.Format.Format' is---     a multi-planar format------ -   @srcBuffer@ /must/ be large enough to contain all buffer locations---     that are accessed according to---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,---     for each element of @pRegions@------ -   The union of all source regions, and the union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   @srcBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @dstImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImage@ /must/ have a sample count equal to---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   @dstImageLayout@ /must/ specify the layout of the image subresources---     of @dstImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @dstImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   The @imageSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @imageSubresource.baseArrayLayer@ +---     @imageSubresource.layerCount@ of each element of @pRegions@ /must/---     be less than or equal to the @arrayLayers@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @imageOffset@ and @imageExtent@ members of each element of---     @pRegions@ /must/ respect the image transfer granularity---     requirements of @commandBuffer@’s command pool’s queue family, as---     described in---     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ -   @dstImage@ /must/ not have been created with @flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If the queue family used to create the---     'Vulkan.Core10.Handles.CommandPool' which @commandBuffer@ was---     allocated from does not support---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the---     @bufferOffset@ member of any element of @pRegions@ /must/ be a---     multiple of @4@------ -   If @dstImage@ has a depth\/stencil format, the @bufferOffset@ member---     of any element of @pRegions@ /must/ be a multiple of @4@------ -   If the queue family used to create the---     'Vulkan.Core10.Handles.CommandPool' which @commandBuffer@ was---     allocated from does not support---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT', for each---     element of @pRegions@, the @aspectMask@ member of @imageSubresource@---     /must/ not be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'.------ -   For each element of @pRegions@, @imageOffset.x@ and---     (@imageExtent.width@ + @imageOffset.x@) /must/ both be greater than---     or equal to @0@ and less than or equal to the width of the specified---     @imageSubresource@ of @dstImage@ where this refers to the width of---     the /plane/ of the image involved in the copy in the case of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>------ -   For each element of @pRegions@, @imageOffset.y@ and---     (imageExtent.height + @imageOffset.y@) /must/ both be greater than---     or equal to @0@ and less than or equal to the height of the---     specified @imageSubresource@ of @dstImage@ where this refers to the---     height of the /plane/ of the image involved in the copy in the case---     of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>------ -   If @dstImage@ does not have either a depth\/stencil or a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @bufferOffset@ /must/ be a---     multiple of the format’s texel block size------ -   If @dstImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @bufferOffset@ /must/ be a---     multiple of the element size of the compatible format for the format---     and the @aspectMask@ of the @imageSubresource@ as defined in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @imageOffset.y@ /must/ be @0@ and---     @imageExtent.height@ /must/ be @1@------ -   For each element of @pRegions@, @imageOffset.z@ and---     (imageExtent.depth + @imageOffset.z@) /must/ both be greater than or---     equal to @0@ and less than or equal to the depth of the specified---     @imageSubresource@ of @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@---     /must/ be @1@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferRowLength@ /must/ be a---     multiple of the compressed texel block width------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferImageHeight@ /must/ be a---     multiple of the compressed texel block height------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, all members of @imageOffset@ /must/---     be a multiple of the corresponding dimensions of the compressed---     texel block------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple---     of the compressed texel block size in bytes------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.width@ /must/ be a---     multiple of the compressed texel block width or (@imageExtent.width@---     + @imageOffset.x@) /must/ equal the width of the specified---     @imageSubresource@ of @dstImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.height@ /must/ be a---     multiple of the compressed texel block height or---     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of---     the specified @imageSubresource@ of @dstImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.depth@ /must/ be a---     multiple of the compressed texel block depth or (@imageExtent.depth@---     + @imageOffset.z@) /must/ equal the depth of the specified---     @imageSubresource@ of @dstImage@------ -   For each element of @pRegions@, @imageSubresource.aspectMask@ /must/---     specify aspects present in @dstImage@------ -   If @dstImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @imageSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'---     (with---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'---     valid only for image formats with three planes)------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each element of---     @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be @0@ and---     @imageSubresource.layerCount@ /must/ be @1@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @srcBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @dstImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'BufferImageCopy' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ -   @regionCount@ /must/ be greater than @0@------ -   Each of @commandBuffer@, @dstImage@, and @srcBuffer@ /must/ have---     been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'-cmdCopyBufferToImage :: forall io-                      . (MonadIO io)-                     => -- | @commandBuffer@ is the command buffer into which the command will be-                        -- recorded.-                        CommandBuffer-                     -> -- | @srcBuffer@ is the source buffer.-                        ("srcBuffer" ::: Buffer)-                     -> -- | @dstImage@ is the destination image.-                        ("dstImage" ::: Image)-                     -> -- | @dstImageLayout@ is the layout of the destination image subresources for-                        -- the copy.-                        ("dstImageLayout" ::: ImageLayout)-                     -> -- | @pRegions@ is a pointer to an array of 'BufferImageCopy' structures-                        -- specifying the regions to copy.-                        ("regions" ::: Vector BufferImageCopy)-                     -> io ()-cmdCopyBufferToImage commandBuffer srcBuffer dstImage dstImageLayout regions = liftIO . evalContT $ do-  let vkCmdCopyBufferToImagePtr = pVkCmdCopyBufferToImage (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyBufferToImagePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBufferToImage is null" Nothing Nothing-  let vkCmdCopyBufferToImage' = mkVkCmdCopyBufferToImage vkCmdCopyBufferToImagePtr-  pPRegions <- ContT $ allocaBytesAligned @BufferImageCopy ((Data.Vector.length (regions)) * 56) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e) . ($ ())) (regions)-  lift $ vkCmdCopyBufferToImage' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyImageToBuffer-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()---- | vkCmdCopyImageToBuffer - Copy image data into a buffer------ = Description------ Each region in @pRegions@ is copied from the specified region of the--- source image to the specified region of the destination buffer.------ If the 'Vulkan.Core10.Enums.Format.Format' of @srcImage@ is a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,--- regions of each plane to be a source of a copy /must/ be specified--- separately using the @pRegions@ member of the 'BufferImageCopy'--- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/--- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For--- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar--- image is treated as having the format listed in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>--- for the plane identified by the @aspectMask@ of the corresponding--- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'--- and to coordinates used in the copy, which correspond to texels in the--- /plane/ rather than how these texels map to coordinates in the image as--- a whole.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is an unprotected command buffer, then---     @dstBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@---     /must/ not be an unprotected buffer------ -   The image region specified by each element of @pRegions@ /must/ be a---     region that is contained within @srcImage@ if the @srcImage@’s---     'Vulkan.Core10.Enums.Format.Format' is not a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     and /must/ be a region that is contained within the plane being---     copied if the @srcImage@’s 'Vulkan.Core10.Enums.Format.Format' is a---     multi-planar format------ -   @dstBuffer@ /must/ be large enough to contain all buffer locations---     that are accessed according to---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,---     for each element of @pRegions@------ -   The union of all source regions, and the union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   @srcImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'------ -   If @srcImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @srcImage@ /must/ have a sample count equal to---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   @srcImageLayout@ /must/ specify the layout of the image subresources---     of @srcImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @srcImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   The @imageSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @imageSubresource.baseArrayLayer@ +---     @imageSubresource.layerCount@ of each element of @pRegions@ /must/---     be less than or equal to the @arrayLayers@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @imageOffset@ and @imageExtent@ members of each element of---     @pRegions@ /must/ respect the image transfer granularity---     requirements of @commandBuffer@’s command pool’s queue family, as---     described in---     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ -   @srcImage@ /must/ not have been created with @flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If the queue family used to create the---     'Vulkan.Core10.Handles.CommandPool' which @commandBuffer@ was---     allocated from does not support---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the---     @bufferOffset@ member of any element of @pRegions@ /must/ be a---     multiple of @4@------ -   If @srcImage@ has a depth\/stencil format, the @bufferOffset@ member---     of any element of @pRegions@ /must/ be a multiple of @4@------ -   For each element of @pRegions@ , @imageOffset.x@ and---     (@imageExtent.width@ + @imageOffset.x@) /must/ both be greater than---     or equal to @0@ and less than or equal to the width of the specified---     @imageSubresource@ of @srcImage@ where this refers to the width of---     the /plane/ of the image involved in the copy in the case of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>------ -   For each element of @pRegions@ , @imageOffset.y@ and---     (imageExtent.height + @imageOffset.y@) /must/ both be greater than---     or equal to @0@ and less than or equal to the height of the---     specified @imageSubresource@ of @srcImage@ where this refers to the---     height of the /plane/ of the image involved in the copy in the case---     of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>------ -   If @srcImage@ does not have either a depth\/stencil or a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @bufferOffset@ /must/ be a---     multiple of the format’s texel block size------ -   If @srcImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @bufferOffset@ /must/ be a---     multiple of the element size of the compatible format for the format---     and the @aspectMask@ of the @imageSubresource@ as defined in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @imageOffset.y@ /must/ be @0@ and---     @imageExtent.height@ /must/ be @1@------ -   For each element of @pRegions@, @imageOffset.z@ and---     (imageExtent.depth + @imageOffset.z@) /must/ both be greater than or---     equal to @0@ and less than or equal to the depth of the specified---     @imageSubresource@ of @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@---     /must/ be @1@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferRowLength@ /must/ be a---     multiple of the compressed texel block width------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferImageHeight@ /must/ be a---     multiple of the compressed texel block height------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, all members of @imageOffset@ /must/---     be a multiple of the corresponding dimensions of the compressed---     texel block------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple---     of the compressed texel block size in bytes------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.width@ /must/ be a---     multiple of the compressed texel block width or (@imageExtent.width@---     + @imageOffset.x@) /must/ equal the width of the specified---     @imageSubresource@ of @srcImage@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.height@ /must/ be a---     multiple of the compressed texel block height or---     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of---     the specified @imageSubresource@ of @srcImage@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.depth@ /must/ be a---     multiple of the compressed texel block depth or (@imageExtent.depth@---     + @imageOffset.z@) /must/ equal the depth of the specified---     @imageSubresource@ of @srcImage@------ -   For each element of @pRegions@, @imageSubresource.aspectMask@ /must/---     specify aspects present in @srcImage@------ -   If @srcImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @imageSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'---     (with---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'---     valid only for image formats with three planes)------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each element of---     @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be @0@ and---     @imageSubresource.layerCount@ /must/ be @1@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @srcImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'BufferImageCopy' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ -   @regionCount@ /must/ be greater than @0@------ -   Each of @commandBuffer@, @dstBuffer@, and @srcImage@ /must/ have---     been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'-cmdCopyImageToBuffer :: forall io-                      . (MonadIO io)-                     => -- | @commandBuffer@ is the command buffer into which the command will be-                        -- recorded.-                        CommandBuffer-                     -> -- | @srcImage@ is the source image.-                        ("srcImage" ::: Image)-                     -> -- | @srcImageLayout@ is the layout of the source image subresources for the-                        -- copy.-                        ("srcImageLayout" ::: ImageLayout)-                     -> -- | @dstBuffer@ is the destination buffer.-                        ("dstBuffer" ::: Buffer)-                     -> -- | @pRegions@ is a pointer to an array of 'BufferImageCopy' structures-                        -- specifying the regions to copy.-                        ("regions" ::: Vector BufferImageCopy)-                     -> io ()-cmdCopyImageToBuffer commandBuffer srcImage srcImageLayout dstBuffer regions = liftIO . evalContT $ do-  let vkCmdCopyImageToBufferPtr = pVkCmdCopyImageToBuffer (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyImageToBufferPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImageToBuffer is null" Nothing Nothing-  let vkCmdCopyImageToBuffer' = mkVkCmdCopyImageToBuffer vkCmdCopyImageToBufferPtr-  pPRegions <- ContT $ allocaBytesAligned @BufferImageCopy ((Data.Vector.length (regions)) * 56) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e) . ($ ())) (regions)-  lift $ vkCmdCopyImageToBuffer' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdUpdateBuffer-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()---- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory------ = Description------ @dataSize@ /must/ be less than or equal to 65536 bytes. For larger--- updates, applications /can/ use buffer to buffer--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers copies>.------ Note------ Buffer updates performed with 'cmdUpdateBuffer' first copy the data into--- command buffer memory when the command is recorded (which requires--- additional storage and may incur an additional allocation), and then--- copy the data from the command buffer into @dstBuffer@ when the command--- is executed on a device.------ The additional cost of this functionality compared to--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers buffer to buffer copies>--- means it is only recommended for very small amounts of data, and is why--- it is limited to only 65536 bytes.------ Applications /can/ work around this by issuing multiple--- 'cmdUpdateBuffer' commands to different ranges of the same buffer, but--- it is strongly recommended that they /should/ not.------ The source data is copied from the user pointer to the command buffer--- when the command is called.------ 'cmdUpdateBuffer' is only allowed outside of a render pass. This command--- is treated as “transfer” operation, for the purposes of synchronization--- barriers. The--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- /must/ be specified in @usage@ of--- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be--- compatible with 'cmdUpdateBuffer'.------ == Valid Usage------ -   @dstOffset@ /must/ be less than the size of @dstBuffer@------ -   @dataSize@ /must/ be less than or equal to the size of @dstBuffer@---     minus @dstOffset@------ -   @dstBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstOffset@ /must/ be a multiple of @4@------ -   @dataSize@ /must/ be less than or equal to @65536@------ -   @dataSize@ /must/ be a multiple of @4@------ -   If @commandBuffer@ is an unprotected command buffer, then---     @dstBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@---     /must/ not be an unprotected buffer------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ -   @dataSize@ /must/ be greater than @0@------ -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdUpdateBuffer :: forall io-                 . (MonadIO io)-                => -- | @commandBuffer@ is the command buffer into which the command will be-                   -- recorded.-                   CommandBuffer-                -> -- | @dstBuffer@ is a handle to the buffer to be updated.-                   ("dstBuffer" ::: Buffer)-                -> -- | @dstOffset@ is the byte offset into the buffer to start updating, and-                   -- /must/ be a multiple of 4.-                   ("dstOffset" ::: DeviceSize)-                -> -- | @dataSize@ is the number of bytes to update, and /must/ be a multiple of-                   -- 4.-                   ("dataSize" ::: DeviceSize)-                -> -- | @pData@ is a pointer to the source data for the buffer update, and-                   -- /must/ be at least @dataSize@ bytes in size.-                   ("data" ::: Ptr ())-                -> io ()-cmdUpdateBuffer commandBuffer dstBuffer dstOffset dataSize data' = liftIO $ do-  let vkCmdUpdateBufferPtr = pVkCmdUpdateBuffer (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdUpdateBufferPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdUpdateBuffer is null" Nothing Nothing-  let vkCmdUpdateBuffer' = mkVkCmdUpdateBuffer vkCmdUpdateBufferPtr-  vkCmdUpdateBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (dataSize) (data')-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdFillBuffer-  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()---- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value------ = Description------ 'cmdFillBuffer' is treated as “transfer” operation for the purposes of--- synchronization barriers. The--- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'--- /must/ be specified in @usage@ of--- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be--- compatible with 'cmdFillBuffer'.------ == Valid Usage------ -   @dstOffset@ /must/ be less than the size of @dstBuffer@------ -   @dstOffset@ /must/ be a multiple of @4@------ -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @size@ /must/ be greater than @0@------ -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @size@ /must/ be less than or equal to the size of @dstBuffer@ minus---     @dstOffset@------ -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @size@ /must/ be a multiple of @4@------ -   @dstBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   If @commandBuffer@ is an unprotected command buffer, then---     @dstBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@---     /must/ not be an unprotected buffer------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdFillBuffer :: forall io-               . (MonadIO io)-              => -- | @commandBuffer@ is the command buffer into which the command will be-                 -- recorded.-                 CommandBuffer-              -> -- | @dstBuffer@ is the buffer to be filled.-                 ("dstBuffer" ::: Buffer)-              -> -- | @dstOffset@ is the byte offset into the buffer at which to start-                 -- filling, and /must/ be a multiple of 4.-                 ("dstOffset" ::: DeviceSize)-              -> -- | @size@ is the number of bytes to fill, and /must/ be either a multiple-                 -- of 4, or 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to fill the range from-                 -- @offset@ to the end of the buffer. If-                 -- 'Vulkan.Core10.APIConstants.WHOLE_SIZE' is used and the remaining size-                 -- of the buffer is not a multiple of 4, then the nearest smaller multiple-                 -- is used.-                 DeviceSize-              -> -- | @data@ is the 4-byte word written repeatedly to the buffer to fill-                 -- @size@ bytes of data. The data word is written to memory according to-                 -- the host endianness.-                 ("data" ::: Word32)-              -> io ()-cmdFillBuffer commandBuffer dstBuffer dstOffset size data' = liftIO $ do-  let vkCmdFillBufferPtr = pVkCmdFillBuffer (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdFillBufferPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdFillBuffer is null" Nothing Nothing-  let vkCmdFillBuffer' = mkVkCmdFillBuffer vkCmdFillBufferPtr-  vkCmdFillBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (size) (data')-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdClearColorImage-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()---- | vkCmdClearColorImage - Clear regions of a color image------ = Description------ Each specified range in @pRanges@ is cleared to the value specified by--- @pColor@.------ == Valid Usage------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @image@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ -   @image@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   @image@ /must/ not use a format listed in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>------ -   If @image@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @imageLayout@ /must/ specify the layout of the image subresource---     ranges of @image@ specified in @pRanges@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @imageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   The 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@---     members of the elements of the @pRanges@ array /must/ each only---     include---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ -   The 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseMipLevel@---     members of the elements of the @pRanges@ array /must/ each be less---     than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created------ -   For each 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of---     @pRanges@, if the @levelCount@ member is not---     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then---     @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@---     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was---     created------ -   The---     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseArrayLayer@---     members of the elements of the @pRanges@ array /must/ each be less---     than the @arrayLayers@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created------ -   For each 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of---     @pRanges@, if the @layerCount@ member is not---     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then---     @baseArrayLayer@ + @layerCount@ /must/ be less than the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @image@ was created------ -   @image@ /must/ not have a compressed or depth\/stencil format------ -   If @commandBuffer@ is an unprotected command buffer, then @image@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @image@---     /must/ not be an unprotected image------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @imageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pColor@ /must/ be a valid pointer to a valid 'ClearColorValue'---     union------ -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@---     valid 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   @rangeCount@ /must/ be greater than @0@------ -   Both of @commandBuffer@, and @image@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'ClearColorValue', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'-cmdClearColorImage :: forall io-                    . (MonadIO io)-                   => -- | @commandBuffer@ is the command buffer into which the command will be-                      -- recorded.-                      CommandBuffer-                   -> -- | @image@ is the image to be cleared.-                      Image-                   -> -- | @imageLayout@ specifies the current layout of the image subresource-                      -- ranges to be cleared, and /must/ be-                      -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',-                      -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or-                      -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.-                      ImageLayout-                   -> -- | @pColor@ is a pointer to a 'ClearColorValue' structure containing the-                      -- values that the image subresource ranges will be cleared to (see-                      -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>-                      -- below).-                      ClearColorValue-                   -> -- | @pRanges@ is a pointer to an array of-                      -- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures describing a-                      -- range of mipmap levels, array layers, and aspects to be cleared, as-                      -- described in-                      -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.-                      ("ranges" ::: Vector ImageSubresourceRange)-                   -> io ()-cmdClearColorImage commandBuffer image imageLayout color ranges = liftIO . evalContT $ do-  let vkCmdClearColorImagePtr = pVkCmdClearColorImage (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdClearColorImagePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearColorImage is null" Nothing Nothing-  let vkCmdClearColorImage' = mkVkCmdClearColorImage vkCmdClearColorImagePtr-  pColor <- ContT $ withCStruct (color)-  pPRanges <- ContT $ allocaBytesAligned @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e) . ($ ())) (ranges)-  lift $ vkCmdClearColorImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pColor ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdClearDepthStencilImage-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()---- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil--- image------ == Valid Usage------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @image@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ -   If the @aspect@ member of any element of @pRanges@ includes---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',---     and @image@ was created with---     <VkImageStencilUsageCreateInfo.html separate stencil usage>,---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     /must/ have been included in the---     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@---     used to create @image@------ -   If the @aspect@ member of any element of @pRanges@ includes---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',---     and @image@ was not created with---     <VkImageStencilUsageCreateInfo.html separate stencil usage>,---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     /must/ have been included in the---     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create---     @image@------ -   If the @aspect@ member of any element of @pRanges@ includes---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     /must/ have been included in the---     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create---     @image@------ -   If @image@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @imageLayout@ /must/ specify the layout of the image subresource---     ranges of @image@ specified in @pRanges@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @imageLayout@ /must/ be either of---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   The 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@---     member of each element of the @pRanges@ array /must/ not include---     bits other than---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'------ -   If the @image@’s format does not have a stencil component, then the---     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member---     of each element of the @pRanges@ array /must/ not include the---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'---     bit------ -   If the @image@’s format does not have a depth component, then the---     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member---     of each element of the @pRanges@ array /must/ not include the---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' bit------ -   The 'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseMipLevel@---     members of the elements of the @pRanges@ array /must/ each be less---     than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created------ -   For each 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of---     @pRanges@, if the @levelCount@ member is not---     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then---     @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@---     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was---     created------ -   The---     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseArrayLayer@---     members of the elements of the @pRanges@ array /must/ each be less---     than the @arrayLayers@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created------ -   For each 'Vulkan.Core10.ImageView.ImageSubresourceRange' element of---     @pRanges@, if the @layerCount@ member is not---     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then---     @baseArrayLayer@ + @layerCount@ /must/ be less than the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @image@ was created------ -   @image@ /must/ have a depth\/stencil format------ -   If @commandBuffer@ is an unprotected command buffer, then @image@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @image@---     /must/ not be an unprotected image------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @imageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pDepthStencil@ /must/ be a valid pointer to a valid---     'ClearDepthStencilValue' structure------ -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@---     valid 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called outside of a render pass instance------ -   @rangeCount@ /must/ be greater than @0@------ -   Both of @commandBuffer@, and @image@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'ClearDepthStencilValue', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',--- 'Vulkan.Core10.ImageView.ImageSubresourceRange'-cmdClearDepthStencilImage :: forall io-                           . (MonadIO io)-                          => -- | @commandBuffer@ is the command buffer into which the command will be-                             -- recorded.-                             CommandBuffer-                          -> -- | @image@ is the image to be cleared.-                             Image-                          -> -- | @imageLayout@ specifies the current layout of the image subresource-                             -- ranges to be cleared, and /must/ be-                             -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or-                             -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.-                             ImageLayout-                          -> -- | @pDepthStencil@ is a pointer to a 'ClearDepthStencilValue' structure-                             -- containing the values that the depth and stencil image subresource-                             -- ranges will be cleared to (see-                             -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>-                             -- below).-                             ClearDepthStencilValue-                          -> -- | @pRanges@ is a pointer to an array of-                             -- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures describing a-                             -- range of mipmap levels, array layers, and aspects to be cleared, as-                             -- described in-                             -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.-                             ("ranges" ::: Vector ImageSubresourceRange)-                          -> io ()-cmdClearDepthStencilImage commandBuffer image imageLayout depthStencil ranges = liftIO . evalContT $ do-  let vkCmdClearDepthStencilImagePtr = pVkCmdClearDepthStencilImage (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdClearDepthStencilImagePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearDepthStencilImage is null" Nothing Nothing-  let vkCmdClearDepthStencilImage' = mkVkCmdClearDepthStencilImage vkCmdClearDepthStencilImagePtr-  pDepthStencil <- ContT $ withCStruct (depthStencil)-  pPRanges <- ContT $ allocaBytesAligned @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e) . ($ ())) (ranges)-  lift $ vkCmdClearDepthStencilImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pDepthStencil ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdClearAttachments-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()---- | vkCmdClearAttachments - Clear regions within bound framebuffer--- attachments------ = Description------ 'cmdClearAttachments' /can/ clear multiple regions of each attachment--- used in the current subpass of a render pass instance. This command--- /must/ be called only inside a render pass instance, and implicitly--- selects the images to clear based on the current framebuffer attachments--- and the command parameters.------ If the render pass has a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>,--- clears follow the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops operations of fragment density maps>--- as if each clear region was a primitive which generates fragments. The--- clear color is applied to all pixels inside each fragment’s area--- regardless if the pixels lie outside of the clear region. Clears /may/--- have a different set of supported fragment areas than draws.------ Unlike other--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,--- 'cmdClearAttachments' executes as a drawing command, rather than a--- transfer command, with writes performed by it executing in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-order rasterization order>.--- Clears to color attachments are executed as color attachment writes, by--- the--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'--- stage. Clears to depth\/stencil attachments are executed as--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth writes>--- and--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil writes>--- by the--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'--- and--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'--- stages.------ == Valid Usage------ -   If the @aspectMask@ member of any element of @pAttachments@ contains---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',---     then the @colorAttachment@ member of that element /must/ either---     refer to a color attachment which is---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ be a valid---     color attachment------ -   If the @aspectMask@ member of any element of @pAttachments@ contains---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',---     then the current subpass\' depth\/stencil attachment /must/ either---     be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a---     depth component------ -   If the @aspectMask@ member of any element of @pAttachments@ contains---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',---     then the current subpass\' depth\/stencil attachment /must/ either---     be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a---     stencil component------ -   The @rect@ member of each element of @pRects@ /must/ have an---     @extent.width@ greater than @0@------ -   The @rect@ member of each element of @pRects@ /must/ have an---     @extent.height@ greater than @0@------ -   The rectangular region specified by each element of @pRects@ /must/---     be contained within the render area of the current render pass---     instance------ -   The layers specified by each element of @pRects@ /must/ be contained---     within every attachment that @pAttachments@ refers to------ -   The @layerCount@ member of each element of @pRects@ /must/ not be---     @0@------ -   If @commandBuffer@ is an unprotected command buffer, then each---     attachment to be cleared /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then each---     attachment to be cleared /must/ not be an unprotected image------ -   If the render pass instance this is recorded in uses multiview, then---     @baseArrayLayer@ /must/ be zero and @layerCount@ /must/ be one------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pAttachments@ /must/ be a valid pointer to an array of---     @attachmentCount@ valid 'ClearAttachment' structures------ -   @pRects@ /must/ be a valid pointer to an array of @rectCount@---     'ClearRect' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called inside of a render pass instance------ -   @attachmentCount@ /must/ be greater than @0@------ -   @rectCount@ /must/ be greater than @0@------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'ClearAttachment', 'ClearRect', 'Vulkan.Core10.Handles.CommandBuffer'-cmdClearAttachments :: forall io-                     . (MonadIO io)-                    => -- | @commandBuffer@ is the command buffer into which the command will be-                       -- recorded.-                       CommandBuffer-                    -> -- | @pAttachments@ is a pointer to an array of 'ClearAttachment' structures-                       -- defining the attachments to clear and the clear values to use. If any-                       -- attachment to be cleared in the current subpass is-                       -- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the clear has no-                       -- effect on that attachment.-                       ("attachments" ::: Vector ClearAttachment)-                    -> -- | @pRects@ is a pointer to an array of 'ClearRect' structures defining-                       -- regions within each selected attachment to clear.-                       ("rects" ::: Vector ClearRect)-                    -> io ()-cmdClearAttachments commandBuffer attachments rects = liftIO . evalContT $ do-  let vkCmdClearAttachmentsPtr = pVkCmdClearAttachments (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdClearAttachmentsPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearAttachments is null" Nothing Nothing-  let vkCmdClearAttachments' = mkVkCmdClearAttachments vkCmdClearAttachmentsPtr-  pPAttachments <- ContT $ allocaBytesAligned @ClearAttachment ((Data.Vector.length (attachments)) * 24) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments `plusPtr` (24 * (i)) :: Ptr ClearAttachment) (e) . ($ ())) (attachments)-  pPRects <- ContT $ allocaBytesAligned @ClearRect ((Data.Vector.length (rects)) * 24) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRects `plusPtr` (24 * (i)) :: Ptr ClearRect) (e) . ($ ())) (rects)-  lift $ vkCmdClearAttachments' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32)) (pPAttachments) ((fromIntegral (Data.Vector.length $ (rects)) :: Word32)) (pPRects)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdResolveImage-  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()---- | vkCmdResolveImage - Resolve regions of an image------ = Description------ During the resolve the samples corresponding to each pixel location in--- the source are converted to a single sample before being written to the--- destination. If the source formats are floating-point or normalized--- types, the sample values for each pixel are resolved in an--- implementation-dependent manner. If the source formats are integer--- types, a single sample’s value is selected for each pixel.------ @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets--- in texels of the sub-regions of the source and destination image data.--- @extent@ is the size in texels of the source image to resolve in--- @width@, @height@ and @depth@. Each element of @pRegions@ /must/ be a--- region that is contained within its corresponding image.------ Resolves are done layer by layer starting with @baseArrayLayer@ member--- of @srcSubresource@ for the source and @dstSubresource@ for the--- destination. @layerCount@ layers are resolved to the destination image.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @dstImage@---     /must/ not be an unprotected image------ -   The union of all source regions, and the union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   If @srcImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @srcImage@ /must/ have a sample count equal to any valid sample---     count value other than---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   If @dstImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImage@ /must/ have a sample count equal to---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   @srcImageLayout@ /must/ specify the layout of the image subresources---     of @srcImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @srcImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   @dstImageLayout@ /must/ specify the layout of the image subresources---     of @dstImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @dstImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @dstImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'------ -   @srcImage@ and @dstImage@ /must/ have been created with the same---     image format------ -   The @srcSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @dstSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @srcImage@ was created------ -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @dstImage@ was created------ -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@---     containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If either @srcImage@ or @dstImage@ are of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and---     @srcSubresource.layerCount@ /must/ be @1@------ -   If either @srcImage@ or @dstImage@ are of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and---     @dstSubresource.layerCount@ /must/ be @1@------ -   For each element of @pRegions@, @srcOffset.x@ and (@extent.width@ +---     @srcOffset.x@) /must/ both be greater than or equal to @0@ and less---     than or equal to the width of the specified @srcSubresource@ of---     @srcImage@------ -   For each element of @pRegions@, @srcOffset.y@ and (@extent.height@ +---     @srcOffset.y@) /must/ both be greater than or equal to @0@ and less---     than or equal to the height of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@---     /must/ be @1@------ -   For each element of @pRegions@, @srcOffset.z@ and (@extent.depth@ +---     @srcOffset.z@) /must/ both be greater than or equal to @0@ and less---     than or equal to the depth of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/---     be @1@------ -   For each element of @pRegions@, @dstOffset.x@ and (@extent.width@ +---     @dstOffset.x@) /must/ both be greater than or equal to @0@ and less---     than or equal to the width of the specified @dstSubresource@ of---     @dstImage@------ -   For each element of @pRegions@, @dstOffset.y@ and (@extent.height@ +---     @dstOffset.y@) /must/ both be greater than or equal to @0@ and less---     than or equal to the height of the specified @dstSubresource@ of---     @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@---     /must/ be @1@------ -   For each element of @pRegions@, @dstOffset.z@ and (@extent.depth@ +---     @dstOffset.z@) /must/ both be greater than or equal to @0@ and less---     than or equal to the depth of the specified @dstSubresource@ of---     @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/---     be @1@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @srcImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @dstImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'ImageResolve' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called outside of a render pass instance------ -   @regionCount@ /must/ be greater than @0@------ -   Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'ImageResolve'-cmdResolveImage :: forall io-                 . (MonadIO io)-                => -- | @commandBuffer@ is the command buffer into which the command will be-                   -- recorded.-                   CommandBuffer-                -> -- | @srcImage@ is the source image.-                   ("srcImage" ::: Image)-                -> -- | @srcImageLayout@ is the layout of the source image subresources for the-                   -- resolve.-                   ("srcImageLayout" ::: ImageLayout)-                -> -- | @dstImage@ is the destination image.-                   ("dstImage" ::: Image)-                -> -- | @dstImageLayout@ is the layout of the destination image subresources for-                   -- the resolve.-                   ("dstImageLayout" ::: ImageLayout)-                -> -- | @pRegions@ is a pointer to an array of 'ImageResolve' structures-                   -- specifying the regions to resolve.-                   ("regions" ::: Vector ImageResolve)-                -> io ()-cmdResolveImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do-  let vkCmdResolveImagePtr = pVkCmdResolveImage (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdResolveImagePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResolveImage is null" Nothing Nothing-  let vkCmdResolveImage' = mkVkCmdResolveImage vkCmdResolveImagePtr-  pPRegions <- ContT $ allocaBytesAligned @ImageResolve ((Data.Vector.length (regions)) * 68) 4-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageResolve) (e) . ($ ())) (regions)-  lift $ vkCmdResolveImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdSetEvent-  :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()---- | vkCmdSetEvent - Set an event object to signaled state------ = Description------ When 'cmdSetEvent' is submitted to a queue, it defines an execution--- dependency on commands that were submitted before it, and defines an--- event signal operation which sets the event to the signaled state.------ The first--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes all commands that occur earlier in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.--- The synchronization scope is limited to operations on the pipeline--- stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>--- specified by @stageMask@.------ The second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes only the event signal operation.------ If @event@ is already in the signaled state when 'cmdSetEvent' is--- executed on the device, then 'cmdSetEvent' has no effect, no event--- signal operation occurs, and no execution dependency is generated.------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'---     or---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ -   Any pipeline stage included in @stageMask@ /must/ be supported by---     the capabilities of the queue family specified by the---     @queueFamilyIndex@ member of the---     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was---     used to create the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ -   @stageMask@ /must/ not include---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'------ -   @commandBuffer@’s current device mask /must/ include exactly one---     physical device------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle------ -   @stageMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'---     values------ -   @stageMask@ /must/ not be @0@------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   Both of @commandBuffer@, and @event@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'-cmdSetEvent :: forall io-             . (MonadIO io)-            => -- | @commandBuffer@ is the command buffer into which the command is-               -- recorded.-               CommandBuffer-            -> -- | @event@ is the event that will be signaled.-               Event-            -> -- | @stageMask@ specifies the-               -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>-               -- used to determine the first-               -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>.-               ("stageMask" ::: PipelineStageFlags)-            -> io ()-cmdSetEvent commandBuffer event stageMask = liftIO $ do-  let vkCmdSetEventPtr = pVkCmdSetEvent (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdSetEventPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetEvent is null" Nothing Nothing-  let vkCmdSetEvent' = mkVkCmdSetEvent vkCmdSetEventPtr-  vkCmdSetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdResetEvent-  :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()---- | vkCmdResetEvent - Reset an event object to non-signaled state------ = Description------ When 'cmdResetEvent' is submitted to a queue, it defines an execution--- dependency on commands that were submitted before it, and defines an--- event unsignal operation which resets the event to the unsignaled state.------ The first--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes all commands that occur earlier in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.--- The synchronization scope is limited to operations on the pipeline--- stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>--- specified by @stageMask@.------ The second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes only the event unsignal operation.------ If @event@ is already in the unsignaled state when 'cmdResetEvent' is--- executed on the device, then 'cmdResetEvent' has no effect, no event--- unsignal operation occurs, and no execution dependency is generated.------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'---     or---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>---     feature is not enabled, @stageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ -   Any pipeline stage included in @stageMask@ /must/ be supported by---     the capabilities of the queue family specified by the---     @queueFamilyIndex@ member of the---     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was---     used to create the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ -   @stageMask@ /must/ not include---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'------ -   When this command executes, @event@ /must/ not be waited on by a---     'cmdWaitEvents' command that is currently executing------ -   @commandBuffer@’s current device mask /must/ include exactly one---     physical device------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle------ -   @stageMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'---     values------ -   @stageMask@ /must/ not be @0@------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   Both of @commandBuffer@, and @event@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'-cmdResetEvent :: forall io-               . (MonadIO io)-              => -- | @commandBuffer@ is the command buffer into which the command is-                 -- recorded.-                 CommandBuffer-              -> -- | @event@ is the event that will be unsignaled.-                 Event-              -> -- | @stageMask@ is a bitmask of-                 -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                 -- specifying the-                 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>-                 -- used to determine when the @event@ is unsignaled.-                 ("stageMask" ::: PipelineStageFlags)-              -> io ()-cmdResetEvent commandBuffer event stageMask = liftIO $ do-  let vkCmdResetEventPtr = pVkCmdResetEvent (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdResetEventPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetEvent is null" Nothing Nothing-  let vkCmdResetEvent' = mkVkCmdResetEvent vkCmdResetEventPtr-  vkCmdResetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdWaitEventsUnsafe-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()--foreign import ccall-  "dynamic" mkVkCmdWaitEventsSafe-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()---- | cmdWaitEvents with selectable safeness-cmdWaitEventsSafeOrUnsafe :: forall io-                           . (MonadIO io)-                          => -- No documentation found for TopLevel ""-                             (FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ())-                          -> -- | @commandBuffer@ is the command buffer into which the command is-                             -- recorded.-                             CommandBuffer-                          -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.-                             ("events" ::: Vector Event)-                          -> -- | @srcStageMask@ is a bitmask of-                             -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                             -- specifying the-                             -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.-                             ("srcStageMask" ::: PipelineStageFlags)-                          -> -- | @dstStageMask@ is a bitmask of-                             -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                             -- specifying the-                             -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.-                             ("dstStageMask" ::: PipelineStageFlags)-                          -> -- | @pMemoryBarriers@ is a pointer to an array of-                             -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.-                             ("memoryBarriers" ::: Vector MemoryBarrier)-                          -> -- | @pBufferMemoryBarriers@ is a pointer to an array of-                             -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.-                             ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)-                          -> -- | @pImageMemoryBarriers@ is a pointer to an array of-                             -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.-                             ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))-                          -> io ()-cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEvents commandBuffer events srcStageMask dstStageMask memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do-  let vkCmdWaitEventsPtr = pVkCmdWaitEvents (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdWaitEventsPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWaitEvents is null" Nothing Nothing-  let vkCmdWaitEvents' = mkVkCmdWaitEvents vkCmdWaitEventsPtr-  pPEvents <- ContT $ allocaBytesAligned @Event ((Data.Vector.length (events)) * 8) 8-  lift $ Data.Vector.imapM_ (\i e -> poke (pPEvents `plusPtr` (8 * (i)) :: Ptr Event) (e)) (events)-  pPMemoryBarriers <- ContT $ allocaBytesAligned @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e) . ($ ())) (memoryBarriers)-  pPBufferMemoryBarriers <- ContT $ allocaBytesAligned @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e) . ($ ())) (bufferMemoryBarriers)-  pPImageMemoryBarriers <- ContT $ allocaBytesAligned @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)-  lift $ vkCmdWaitEvents' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (events)) :: Word32)) (pPEvents) (srcStageMask) (dstStageMask) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (forgetExtensions (pPImageMemoryBarriers))-  pure $ ()---- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory------ = Description------ When 'cmdWaitEvents' is submitted to a queue, it defines a memory--- dependency between prior event signal operations on the same queue or--- the host, and subsequent commands. 'cmdWaitEvents' /must/ not be used to--- wait on event signal operations occurring on other queues.------ The first synchronization scope only includes event signal operations--- that operate on members of @pEvents@, and the operations that--- happened-before the event signal operations. Event signal operations--- performed by 'cmdSetEvent' that occur earlier in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>--- are included in the first synchronization scope, if the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>--- pipeline stage in their @stageMask@ parameter is--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>--- than or equal to the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>--- pipeline stage in @srcStageMask@. Event signal operations performed by--- 'Vulkan.Core10.Event.setEvent' are only included in the first--- synchronization scope if--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT' is--- included in @srcStageMask@.------ The second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes all commands that occur later in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.--- The second synchronization scope is limited to operations on the--- pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>--- specified by @dstStageMask@.------ The first--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>--- is limited to access in the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>--- specified by @srcStageMask@. Within that, the first access scope only--- includes the first access scopes defined by elements of the--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@--- arrays, which each define a set of--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.--- If no memory barriers are specified, then the first access scope--- includes no accesses.------ The second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>--- is limited to access in the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>--- specified by @dstStageMask@. Within that, the second access scope only--- includes the second access scopes defined by elements of the--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@--- arrays, which each define a set of--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.--- If no memory barriers are specified, then the second access scope--- includes no accesses.------ Note------ 'cmdWaitEvents' is used with 'cmdSetEvent' to define a memory dependency--- between two sets of action commands, roughly in the same way as pipeline--- barriers, but split into two commands such that work between the two--- /may/ execute unhindered.------ Unlike 'cmdPipelineBarrier', a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>--- /cannot/ be performed using 'cmdWaitEvents'.------ Note------ Applications /should/ be careful to avoid race conditions when using--- events. There is no direct ordering guarantee between a 'cmdResetEvent'--- command and a 'cmdWaitEvents' command submitted after it. Another--- execution dependency (e.g. a pipeline barrier or semaphore with--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ALL_COMMANDS_BIT')--- is needed to prevent such a race condition.------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'---     or---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ -   Any pipeline stage included in @srcStageMask@ /must/ be supported by---     the capabilities of the queue family specified by the---     @queueFamilyIndex@ member of the---     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was---     used to create the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'---     or---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ -   Any pipeline stage included in @dstStageMask@ /must/ be supported by---     the capabilities of the queue family specified by the---     @queueFamilyIndex@ member of the---     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was---     used to create the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ -   The @srcAccessMask@ member of each element of @pMemoryBarriers@---     /must/ only include access flags that are supported by one or more---     of the pipeline stages in @srcStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   The @dstAccessMask@ member of each element of @pMemoryBarriers@---     /must/ only include access flags that are supported by one or more---     of the pipeline stages in @dstStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   For any element of @pBufferMemoryBarriers@, if its---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,---     or if its @srcQueueFamilyIndex@ is the queue family index that was---     used to create the command pool that @commandBuffer@ was allocated---     from, then its @srcAccessMask@ member /must/ only contain access---     flags that are supported by one or more of the pipeline stages in---     @srcStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   For any element of @pBufferMemoryBarriers@, if its---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,---     or if its @dstQueueFamilyIndex@ is the queue family index that was---     used to create the command pool that @commandBuffer@ was allocated---     from, then its @dstAccessMask@ member /must/ only contain access---     flags that are supported by one or more of the pipeline stages in---     @dstStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   For any element of @pImageMemoryBarriers@, if its---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,---     or if its @srcQueueFamilyIndex@ is the queue family index that was---     used to create the command pool that @commandBuffer@ was allocated---     from, then its @srcAccessMask@ member /must/ only contain access---     flags that are supported by one or more of the pipeline stages in---     @srcStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   For any element of @pImageMemoryBarriers@, if its---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,---     or if its @dstQueueFamilyIndex@ is the queue family index that was---     used to create the command pool that @commandBuffer@ was allocated---     from, then its @dstAccessMask@ member /must/ only contain access---     flags that are supported by one or more of the pipeline stages in---     @dstStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   @srcStageMask@ /must/ be the bitwise OR of the @stageMask@ parameter---     used in previous calls to 'cmdSetEvent' with any of the members of---     @pEvents@ and---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'---     if any of the members of @pEvents@ was set using---     'Vulkan.Core10.Event.setEvent'------ -   If @pEvents@ includes one or more events that will be signaled by---     'Vulkan.Core10.Event.setEvent' after @commandBuffer@ has been---     submitted to a queue, then 'cmdWaitEvents' /must/ not be called---     inside a render pass instance------ -   The @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any---     element of @pBufferMemoryBarriers@ or @pImageMemoryBarriers@ /must/---     be equal------ -   @commandBuffer@’s current device mask /must/ include exactly one---     physical device------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pEvents@ /must/ be a valid pointer to an array of @eventCount@---     valid 'Vulkan.Core10.Handles.Event' handles------ -   @srcStageMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'---     values------ -   @srcStageMask@ /must/ not be @0@------ -   @dstStageMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'---     values------ -   @dstStageMask@ /must/ not be @0@------ -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a---     valid pointer to an array of @memoryBarrierCount@ valid---     'Vulkan.Core10.OtherTypes.MemoryBarrier' structures------ -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@---     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@---     valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures------ -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@---     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@---     valid 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   @eventCount@ /must/ be greater than @0@------ -   Both of @commandBuffer@, and the elements of @pEvents@ /must/ have---     been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',--- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',--- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',--- 'Vulkan.Core10.OtherTypes.MemoryBarrier',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'-cmdWaitEvents :: forall io-               . (MonadIO io)-              => -- | @commandBuffer@ is the command buffer into which the command is-                 -- recorded.-                 CommandBuffer-              -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.-                 ("events" ::: Vector Event)-              -> -- | @srcStageMask@ is a bitmask of-                 -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                 -- specifying the-                 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.-                 ("srcStageMask" ::: PipelineStageFlags)-              -> -- | @dstStageMask@ is a bitmask of-                 -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                 -- specifying the-                 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.-                 ("dstStageMask" ::: PipelineStageFlags)-              -> -- | @pMemoryBarriers@ is a pointer to an array of-                 -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.-                 ("memoryBarriers" ::: Vector MemoryBarrier)-              -> -- | @pBufferMemoryBarriers@ is a pointer to an array of-                 -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.-                 ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)-              -> -- | @pImageMemoryBarriers@ is a pointer to an array of-                 -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.-                 ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))-              -> io ()-cmdWaitEvents = cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEventsUnsafe---- | A variant of 'cmdWaitEvents' which makes a *safe* FFI call-cmdWaitEventsSafe :: forall io-                   . (MonadIO io)-                  => -- | @commandBuffer@ is the command buffer into which the command is-                     -- recorded.-                     CommandBuffer-                  -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.-                     ("events" ::: Vector Event)-                  -> -- | @srcStageMask@ is a bitmask of-                     -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                     -- specifying the-                     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.-                     ("srcStageMask" ::: PipelineStageFlags)-                  -> -- | @dstStageMask@ is a bitmask of-                     -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                     -- specifying the-                     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.-                     ("dstStageMask" ::: PipelineStageFlags)-                  -> -- | @pMemoryBarriers@ is a pointer to an array of-                     -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.-                     ("memoryBarriers" ::: Vector MemoryBarrier)-                  -> -- | @pBufferMemoryBarriers@ is a pointer to an array of-                     -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.-                     ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)-                  -> -- | @pImageMemoryBarriers@ is a pointer to an array of-                     -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.-                     ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))-                  -> io ()-cmdWaitEventsSafe = cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEventsSafe---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdPipelineBarrier-  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()---- | vkCmdPipelineBarrier - Insert a memory dependency------ = Description------ When 'cmdPipelineBarrier' is submitted to a queue, it defines a memory--- dependency between commands that were submitted before it, and those--- submitted after it.------ If 'cmdPipelineBarrier' was recorded outside a render pass instance, the--- first--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes all commands that occur earlier in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.--- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the--- first synchronization scope includes only commands that occur earlier in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>--- within the same subpass. In either case, the first synchronization scope--- is limited to operations on the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>--- specified by @srcStageMask@.------ If 'cmdPipelineBarrier' was recorded outside a render pass instance, the--- second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>--- includes all commands that occur later in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.--- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the--- second synchronization scope includes only commands that occur later in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>--- within the same subpass. In either case, the second synchronization--- scope is limited to operations on the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>--- specified by @dstStageMask@.------ The first--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>--- is limited to access in the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>--- specified by @srcStageMask@. Within that, the first access scope only--- includes the first access scopes defined by elements of the--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@--- arrays, which each define a set of--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.--- If no memory barriers are specified, then the first access scope--- includes no accesses.------ The second--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>--- is limited to access in the pipeline stages determined by the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>--- specified by @dstStageMask@. Within that, the second access scope only--- includes the second access scopes defined by elements of the--- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@--- arrays, which each define a set of--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.--- If no memory barriers are specified, then the second access scope--- includes no accesses.------ If @dependencyFlags@ includes--- 'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT', then--- any dependency between--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space>--- pipeline stages is--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-local>--- - otherwise it is--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-global>.------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'---     or---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>---     feature is not enabled, @srcStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ -   Any pipeline stage included in @srcStageMask@ /must/ be supported by---     the capabilities of the queue family specified by the---     @queueFamilyIndex@ member of the---     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was---     used to create the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'---     or---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>---     feature is not enabled, @dstStageMask@ /must/ not contain---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ -   Any pipeline stage included in @dstStageMask@ /must/ be supported by---     the capabilities of the queue family specified by the---     @queueFamilyIndex@ member of the---     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was---     used to create the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>------ -   The @srcAccessMask@ member of each element of @pMemoryBarriers@---     /must/ only include access flags that are supported by one or more---     of the pipeline stages in @srcStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   The @dstAccessMask@ member of each element of @pMemoryBarriers@---     /must/ only include access flags that are supported by one or more---     of the pipeline stages in @dstStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   For any element of @pBufferMemoryBarriers@, if its---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,---     or if its @srcQueueFamilyIndex@ is the queue family index that was---     used to create the command pool that @commandBuffer@ was allocated---     from, then its @srcAccessMask@ member /must/ only contain access---     flags that are supported by one or more of the pipeline stages in---     @srcStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   For any element of @pBufferMemoryBarriers@, if its---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,---     or if its @dstQueueFamilyIndex@ is the queue family index that was---     used to create the command pool that @commandBuffer@ was allocated---     from, then its @dstAccessMask@ member /must/ only contain access---     flags that are supported by one or more of the pipeline stages in---     @dstStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   For any element of @pImageMemoryBarriers@, if its---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,---     or if its @srcQueueFamilyIndex@ is the queue family index that was---     used to create the command pool that @commandBuffer@ was allocated---     from, then its @srcAccessMask@ member /must/ only contain access---     flags that are supported by one or more of the pipeline stages in---     @srcStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   For any element of @pImageMemoryBarriers@, if its---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members are equal,---     or if its @dstQueueFamilyIndex@ is the queue family index that was---     used to create the command pool that @commandBuffer@ was allocated---     from, then its @dstAccessMask@ member /must/ only contain access---     flags that are supported by one or more of the pipeline stages in---     @dstStageMask@, as specified in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>------ -   If 'cmdPipelineBarrier' is called within a render pass instance, the---     render pass /must/ have been created with at least one---     'Vulkan.Core10.Pass.SubpassDependency' instance in---     'Vulkan.Core10.Pass.RenderPassCreateInfo'::@pDependencies@ that---     expresses a dependency from the current subpass to itself, with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scopes>---     and---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scopes>---     that are all supersets of the scopes defined in this command------ -   If 'cmdPipelineBarrier' is called within a render pass instance, it---     /must/ not include any buffer memory barriers------ -   If 'cmdPipelineBarrier' is called within a render pass instance, the---     @image@ member of any image memory barrier included in this command---     /must/ be an attachment used in the current subpass both as an input---     attachment, and as either a color or depth\/stencil attachment------ -   If 'cmdPipelineBarrier' is called within a render pass instance, the---     @oldLayout@ and @newLayout@ members of any image memory barrier---     included in this command /must/ be equal------ -   If 'cmdPipelineBarrier' is called within a render pass instance, the---     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any image---     memory barrier included in this command /must/ be equal------ -   If 'cmdPipelineBarrier' is called outside of a render pass instance,---     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'---     /must/ not be included in the dependency flags------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @srcStageMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'---     values------ -   @srcStageMask@ /must/ not be @0@------ -   @dstStageMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'---     values------ -   @dstStageMask@ /must/ not be @0@------ -   @dependencyFlags@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values------ -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a---     valid pointer to an array of @memoryBarrierCount@ valid---     'Vulkan.Core10.OtherTypes.MemoryBarrier' structures------ -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@---     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@---     valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures------ -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@---     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@---     valid 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',--- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',--- 'Vulkan.Core10.OtherTypes.MemoryBarrier',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'-cmdPipelineBarrier :: forall io-                    . (MonadIO io)-                   => -- | @commandBuffer@ is the command buffer into which the command is-                      -- recorded.-                      CommandBuffer-                   -> -- | @srcStageMask@ is a bitmask of-                      -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                      -- specifying the-                      -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>.-                      ("srcStageMask" ::: PipelineStageFlags)-                   -> -- | @dstStageMask@ is a bitmask of-                      -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'-                      -- specifying the-                      -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>.-                      ("dstStageMask" ::: PipelineStageFlags)-                   -> -- | @dependencyFlags@ is a bitmask of-                      -- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' specifying-                      -- how execution and memory dependencies are formed.-                      DependencyFlags-                   -> -- | @pMemoryBarriers@ is a pointer to an array of-                      -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.-                      ("memoryBarriers" ::: Vector MemoryBarrier)-                   -> -- | @pBufferMemoryBarriers@ is a pointer to an array of-                      -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.-                      ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)-                   -> -- | @pImageMemoryBarriers@ is a pointer to an array of-                      -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.-                      ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))-                   -> io ()-cmdPipelineBarrier commandBuffer srcStageMask dstStageMask dependencyFlags memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do-  let vkCmdPipelineBarrierPtr = pVkCmdPipelineBarrier (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdPipelineBarrierPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPipelineBarrier is null" Nothing Nothing-  let vkCmdPipelineBarrier' = mkVkCmdPipelineBarrier vkCmdPipelineBarrierPtr-  pPMemoryBarriers <- ContT $ allocaBytesAligned @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e) . ($ ())) (memoryBarriers)-  pPBufferMemoryBarriers <- ContT $ allocaBytesAligned @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e) . ($ ())) (bufferMemoryBarriers)-  pPImageMemoryBarriers <- ContT $ allocaBytesAligned @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)-  lift $ vkCmdPipelineBarrier' (commandBufferHandle (commandBuffer)) (srcStageMask) (dstStageMask) (dependencyFlags) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (forgetExtensions (pPImageMemoryBarriers))-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBeginQuery-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()---- | vkCmdBeginQuery - Begin a query------ = Description------ If the @queryType@ of the pool is--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' and @flags@--- contains--- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT', an--- implementation /must/ return a result that matches the actual number of--- samples passed. This is described in more detail in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion Occlusion Queries>.------ Calling 'cmdBeginQuery' is equivalent to calling--- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT'--- with the @index@ parameter set to zero.------ After beginning a query, that query is considered /active/ within the--- command buffer it was called in until that same query is ended. Queries--- active in a primary command buffer when secondary command buffers are--- executed are considered active for those secondary command buffers.------ == Valid Usage------ -   @queryPool@ /must/ have been created with a @queryType@ that differs---     from that of any queries that are---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>---     within @commandBuffer@------ -   All queries used by the command /must/ be unavailable------ -   The @queryType@ used to create @queryPool@ /must/ not be---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>---     feature is not enabled, or the @queryType@ used to create---     @queryPool@ was not---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', @flags@ /must/---     not contain---     'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'------ -   @query@ /must/ be less than the number of queries in @queryPool@------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the---     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and---     any of the @pipelineStatistics@ indicate graphics operations, the---     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and---     any of the @pipelineStatistics@ indicate compute operations, the---     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   @commandBuffer@ /must/ not be a protected command buffer------ -   If called within a render pass instance, the sum of @query@ and the---     number of bits set in the current subpass’s view mask /must/ be less---     than or equal to the number of queries in @queryPool@------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'---     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'---     then---     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@---     /must/ be supported------ -   If @queryPool@ was created with a @queryType@ of---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',---     the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>---     /must/ have been held before---     'Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called on---     @commandBuffer@------ -   If @queryPool@ was created with a @queryType@ of---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and---     one of the counters used to create @queryPool@ was---     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',---     the query begin /must/ be the first recorded command in---     @commandBuffer@------ -   If @queryPool@ was created with a @queryType@ of---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and---     one of the counters used to create @queryPool@ was---     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',---     the begin command /must/ not be recorded within a render pass---     instance------ -   If @queryPool@ was created with a @queryType@ of---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and---     another query pool with a @queryType@---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' has---     been used within @commandBuffer@, its parent primary command buffer---     or secondary command buffer recorded within the same parent primary---     command buffer as @commandBuffer@, the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools>---     feature /must/ be enabled------ -   If @queryPool@ was created with a @queryType@ of---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',---     this command /must/ not be recorded in a command buffer that, either---     directly or through secondary command buffers, also contains a---     'cmdResetQueryPool' command affecting the same query------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle------ -   @flags@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'---     values------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',--- 'Vulkan.Core10.Handles.QueryPool'-cmdBeginQuery :: forall io-               . (MonadIO io)-              => -- | @commandBuffer@ is the command buffer into which this command will be-                 -- recorded.-                 CommandBuffer-              -> -- | @queryPool@ is the query pool that will manage the results of the query.-                 QueryPool-              -> -- | @query@ is the query index within the query pool that will contain the-                 -- results.-                 ("query" ::: Word32)-              -> -- | @flags@ is a bitmask of-                 -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'-                 -- specifying constraints on the types of queries that /can/ be performed.-                 QueryControlFlags-              -> io ()-cmdBeginQuery commandBuffer queryPool query flags = liftIO $ do-  let vkCmdBeginQueryPtr = pVkCmdBeginQuery (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdBeginQueryPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginQuery is null" Nothing Nothing-  let vkCmdBeginQuery' = mkVkCmdBeginQuery vkCmdBeginQueryPtr-  vkCmdBeginQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query) (flags)-  pure $ ()---- | This function will call the supplied action between calls to--- 'cmdBeginQuery' and 'cmdEndQuery'------ Note that 'cmdEndQuery' is *not* called if an exception is thrown by the--- inner action.-cmdUseQuery :: forall io r . MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> io r -> io r-cmdUseQuery commandBuffer queryPool query flags a =-  (cmdBeginQuery commandBuffer queryPool query flags) *> a <* (cmdEndQuery commandBuffer queryPool query)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdEndQuery-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()---- | vkCmdEndQuery - Ends a query------ = Description------ Calling 'cmdEndQuery' is equivalent to calling--- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT' with--- the @index@ parameter set to zero.------ As queries operate asynchronously, ending a query does not immediately--- set the query’s status to available. A query is considered /finished/--- when the final results of the query are ready to be retrieved by--- 'Vulkan.Core10.Query.getQueryPoolResults' and 'cmdCopyQueryPoolResults',--- and this is when the query’s status is set to available.------ Once a query is ended the query /must/ finish in finite time, unless the--- state of the query is changed using other commands, e.g. by issuing a--- reset of the query.------ == Valid Usage------ -   All queries used by the command /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>------ -   @query@ /must/ be less than the number of queries in @queryPool@------ -   @commandBuffer@ /must/ not be a protected command buffer------ -   If 'cmdEndQuery' is called within a render pass instance, the sum of---     @query@ and the number of bits set in the current subpass’s view---     mask /must/ be less than or equal to the number of queries in---     @queryPool@------ -   If @queryPool@ was created with a @queryType@ of---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and---     one or more of the counters used to create @queryPool@ was---     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',---     the 'cmdEndQuery' /must/ be the last recorded command in---     @commandBuffer@------ -   If @queryPool@ was created with a @queryType@ of---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and---     one or more of the counters used to create @queryPool@ was---     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',---     the 'cmdEndQuery' /must/ not be recorded within a render pass---     instance------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'-cmdEndQuery :: forall io-             . (MonadIO io)-            => -- | @commandBuffer@ is the command buffer into which this command will be-               -- recorded.-               CommandBuffer-            -> -- | @queryPool@ is the query pool that is managing the results of the query.-               QueryPool-            -> -- | @query@ is the query index within the query pool where the result is-               -- stored.-               ("query" ::: Word32)-            -> io ()-cmdEndQuery commandBuffer queryPool query = liftIO $ do-  let vkCmdEndQueryPtr = pVkCmdEndQuery (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdEndQueryPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndQuery is null" Nothing Nothing-  let vkCmdEndQuery' = mkVkCmdEndQuery vkCmdEndQueryPtr-  vkCmdEndQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdResetQueryPool-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()---- | vkCmdResetQueryPool - Reset queries in a query pool------ = Description------ When executed on a queue, this command sets the status of query indices--- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.------ If the @queryType@ used to create @queryPool@ was--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', this--- command sets the status of query indices [@firstQuery@, @firstQuery@ +--- @queryCount@ - 1] to unavailable for each pass of @queryPool@, as--- indicated by a call to--- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.------ Note------ Because 'cmdResetQueryPool' resets all the passes of the indicated--- queries, applications must not record a 'cmdResetQueryPool' command for--- a @queryPool@ created with--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' in a--- command buffer that needs to be submitted multiple times as indicated by--- a call to--- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.--- Otherwise applications will never be able to complete the recorded--- queries.------ == Valid Usage------ -   @firstQuery@ /must/ be less than the number of queries in---     @queryPool@------ -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or---     equal to the number of queries in @queryPool@------ -   All queries used by the command /must/ not be active------ -   If @queryPool@ was created with---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',---     this command /must/ not be recorded in a command buffer that, either---     directly or through secondary command buffers, also contains begin---     commands for a query from the set of queries [@firstQuery@,---     @firstQuery@ + @queryCount@ - 1]------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'-cmdResetQueryPool :: forall io-                   . (MonadIO io)-                  => -- | @commandBuffer@ is the command buffer into which this command will be-                     -- recorded.-                     CommandBuffer-                  -> -- | @queryPool@ is the handle of the query pool managing the queries being-                     -- reset.-                     QueryPool-                  -> -- | @firstQuery@ is the initial query index to reset.-                     ("firstQuery" ::: Word32)-                  -> -- | @queryCount@ is the number of queries to reset.-                     ("queryCount" ::: Word32)-                  -> io ()-cmdResetQueryPool commandBuffer queryPool firstQuery queryCount = liftIO $ do-  let vkCmdResetQueryPoolPtr = pVkCmdResetQueryPool (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdResetQueryPoolPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetQueryPool is null" Nothing Nothing-  let vkCmdResetQueryPool' = mkVkCmdResetQueryPool vkCmdResetQueryPoolPtr-  vkCmdResetQueryPool' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdWriteTimestamp-  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()---- | vkCmdWriteTimestamp - Write a device timestamp into a query object------ = Description------ 'cmdWriteTimestamp' latches the value of the timer when all previous--- commands have completed executing as far as the specified pipeline--- stage, and writes the timestamp value to memory. When the timestamp--- value is written, the availability status of the query is set to--- available.------ Note------ If an implementation is unable to detect completion and latch the timer--- at any specific stage of the pipeline, it /may/ instead do so at any--- logically later stage.------ Timestamps /may/ only be meaningfully compared if they are written by--- commands submitted to the same queue.------ Note------ An example of such a comparison is determining the execution time of a--- sequence of commands.------ If 'cmdWriteTimestamp' is called while executing a render pass instance--- that has multiview enabled, the timestamp uses N consecutive query--- indices in the query pool (starting at @query@) where N is the number of--- bits set in the view mask of the subpass the command is executed in. The--- resulting query values are determined by an implementation-dependent--- choice of one of the following behaviors:------ -   The first query is a timestamp value and (if more than one bit is---     set in the view mask) zero is written to the remaining queries. If---     two timestamps are written in the same subpass, the sum of the---     execution time of all views between those commands is the difference---     between the first query written by each command.------ -   All N queries are timestamp values. If two timestamps are written in---     the same subpass, the sum of the execution time of all views between---     those commands is the sum of the difference between corresponding---     queries written by each command. The difference between---     corresponding queries /may/ be the execution time of a single view.------ In either case, the application /can/ sum the differences between all N--- queries to determine the total execution time.------ == Valid Usage------ -   @pipelineStage@ /must/ be a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported valid stage>---     for the queue family that was used to create the command pool that---     @commandBuffer@ was allocated from------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @pipelineStage@ /must/ not be---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @pipelineStage@ /must/ not be---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'---     or---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>---     feature is not enabled, @pipelineStage@ /must/ not be---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>---     feature is not enabled, @pipelineStage@ /must/ not be---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>---     feature is not enabled, @pipelineStage@ /must/ not be---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>---     feature is not enabled, @pipelineStage@ /must/ not be---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'---     or---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>---     feature is not enabled, @pipelineStage@ /must/ not be---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'------ -   @queryPool@ /must/ have been created with a @queryType@ of---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'------ -   The query identified by @queryPool@ and @query@ /must/ be---     /unavailable/------ -   The command pool’s queue family /must/ support a non-zero---     @timestampValidBits@------ -   All queries used by the command /must/ be unavailable------ -   If 'cmdWriteTimestamp' is called within a render pass instance, the---     sum of @query@ and the number of bits set in the current subpass’s---     view mask /must/ be less than or equal to the number of queries in---     @queryPool@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pipelineStage@ /must/ be a valid---     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'---     value------ -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',--- 'Vulkan.Core10.Handles.QueryPool'-cmdWriteTimestamp :: forall io-                   . (MonadIO io)-                  => -- | @commandBuffer@ is the command buffer into which the command will be-                     -- recorded.-                     CommandBuffer-                  -> -- | @pipelineStage@ is one of the-                     -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',-                     -- specifying a stage of the pipeline.-                     PipelineStageFlagBits-                  -> -- | @queryPool@ is the query pool that will manage the timestamp.-                     QueryPool-                  -> -- | @query@ is the query within the query pool that will contain the-                     -- timestamp.-                     ("query" ::: Word32)-                  -> io ()-cmdWriteTimestamp commandBuffer pipelineStage queryPool query = liftIO $ do-  let vkCmdWriteTimestampPtr = pVkCmdWriteTimestamp (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdWriteTimestampPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteTimestamp is null" Nothing Nothing-  let vkCmdWriteTimestamp' = mkVkCmdWriteTimestamp vkCmdWriteTimestampPtr-  vkCmdWriteTimestamp' (commandBufferHandle (commandBuffer)) (pipelineStage) (queryPool) (query)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyQueryPoolResults-  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()---- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool--- to a buffer object------ = Description------ 'cmdCopyQueryPoolResults' is guaranteed to see the effect of previous--- uses of 'cmdResetQueryPool' in the same queue, without any additional--- synchronization. Thus, the results will always reflect the most recent--- use of the query.------ @flags@ has the same possible values described above for the @flags@--- parameter of 'Vulkan.Core10.Query.getQueryPoolResults', but the--- different style of execution causes some subtle behavioral differences.--- Because 'cmdCopyQueryPoolResults' executes in order with respect to--- other query commands, there is less ambiguity about which use of a query--- is being requested.------ Results for all requested occlusion queries, pipeline statistics--- queries, transform feedback queries, and timestamp queries are written--- as 64-bit unsigned integer values if--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set or--- 32-bit unsigned integer values otherwise. Performance queries store--- results in a tightly packed array whose type is determined by the @unit@--- member of the corresponding--- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterKHR'.------ If neither of--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' and--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'--- are set, results are only written out for queries in the available--- state.------ If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is--- set, the implementation will wait for each query’s status to be in the--- available state before retrieving the numerical results for that query.--- This is guaranteed to reflect the most recent use of the query on the--- same queue, assuming that the query is not being simultaneously used by--- other queues. If the query does not become available in a finite amount--- of time (e.g. due to not issuing a query since the last reset), a--- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' error /may/ occur.------ Similarly, if--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'--- is set and--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is not--- set, the availability is guaranteed to reflect the most recent use of--- the query on the same queue, assuming that the query is not being--- simultaneously used by other queues. As with--- 'Vulkan.Core10.Query.getQueryPoolResults', implementations /must/--- guarantee that if they return a non-zero availability value, then the--- numerical results are valid.------ If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT' is--- set, 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is--- not set, and the query’s status is unavailable, an intermediate result--- value between zero and the final result value is written for that query.------ 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'--- /must/ not be used if the pool’s @queryType@ is--- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'.------ 'cmdCopyQueryPoolResults' is considered to be a transfer operation, and--- its writes to buffer memory /must/ be synchronized using--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'--- and 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT'--- before using the results.------ == Valid Usage------ -   @dstOffset@ /must/ be less than the size of @dstBuffer@------ -   @firstQuery@ /must/ be less than the number of queries in---     @queryPool@------ -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or---     equal to the number of queries in @queryPool@------ -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is---     not set in @flags@ then @dstOffset@ and @stride@ /must/ be multiples---     of @4@------ -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is---     set in @flags@ then @dstOffset@ and @stride@ /must/ be multiples of---     @8@------ -   @dstBuffer@ /must/ have enough storage, from @dstOffset@, to contain---     the result of each query, as described---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here>------ -   @dstBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP', @flags@ /must/---     not contain---     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',---     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR'::@allowCommandBufferQueryCopies@---     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',---     @flags@ /must/ not contain---     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT',---     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'---     or 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'------ -   If the @queryType@ used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',---     the @queryPool@ /must/ have been submitted once for each pass as---     retrieved via a call to---     'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'------ -   'cmdCopyQueryPoolResults' /must/ not be called if the @queryType@---     used to create @queryPool@ was---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_INTEL'------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle------ -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @flags@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' values------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   Each of @commandBuffer@, @dstBuffer@, and @queryPool@ /must/ have---     been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Handles.QueryPool',--- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlags'-cmdCopyQueryPoolResults :: forall io-                         . (MonadIO io)-                        => -- | @commandBuffer@ is the command buffer into which this command will be-                           -- recorded.-                           CommandBuffer-                        -> -- | @queryPool@ is the query pool managing the queries containing the-                           -- desired results.-                           QueryPool-                        -> -- | @firstQuery@ is the initial query index.-                           ("firstQuery" ::: Word32)-                        -> -- | @queryCount@ is the number of queries. @firstQuery@ and @queryCount@-                           -- together define a range of queries.-                           ("queryCount" ::: Word32)-                        -> -- | @dstBuffer@ is a 'Vulkan.Core10.Handles.Buffer' object that will receive-                           -- the results of the copy command.-                           ("dstBuffer" ::: Buffer)-                        -> -- | @dstOffset@ is an offset into @dstBuffer@.-                           ("dstOffset" ::: DeviceSize)-                        -> -- | @stride@ is the stride in bytes between results for individual queries-                           -- within @dstBuffer@. The required size of the backing memory for-                           -- @dstBuffer@ is determined as described above for-                           -- 'Vulkan.Core10.Query.getQueryPoolResults'.-                           ("stride" ::: DeviceSize)-                        -> -- | @flags@ is a bitmask of-                           -- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' specifying-                           -- how and when results are returned.-                           QueryResultFlags-                        -> io ()-cmdCopyQueryPoolResults commandBuffer queryPool firstQuery queryCount dstBuffer dstOffset stride flags = liftIO $ do-  let vkCmdCopyQueryPoolResultsPtr = pVkCmdCopyQueryPoolResults (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdCopyQueryPoolResultsPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyQueryPoolResults is null" Nothing Nothing-  let vkCmdCopyQueryPoolResults' = mkVkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResultsPtr-  vkCmdCopyQueryPoolResults' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount) (dstBuffer) (dstOffset) (stride) (flags)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdPushConstants-  :: FunPtr (Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()---- | vkCmdPushConstants - Update the values of push constants------ = Description------ Note------ As @stageFlags@ needs to include all flags the relevant push constant--- ranges were created with, any flags that are not supported by the queue--- family that the 'Vulkan.Core10.Handles.CommandPool' used to allocate--- @commandBuffer@ was created on are ignored.------ == Valid Usage------ -   For each byte in the range specified by @offset@ and @size@ and for---     each shader stage in @stageFlags@, there /must/ be a push constant---     range in @layout@ that includes that byte and that stage------ -   For each byte in the range specified by @offset@ and @size@ and for---     each push constant range that overlaps that byte, @stageFlags@---     /must/ include all stages in that push constant range’s---     'Vulkan.Core10.PipelineLayout.PushConstantRange'::@stageFlags@------ -   @offset@ /must/ be a multiple of @4@------ -   @size@ /must/ be a multiple of @4@------ -   @offset@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@------ -   @size@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@---     minus @offset@------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'---     handle------ -   @stageFlags@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values------ -   @stageFlags@ /must/ not be @0@------ -   @pValues@ /must/ be a valid pointer to an array of @size@ bytes------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics, or compute operations------ -   @size@ /must/ be greater than @0@------ -   Both of @commandBuffer@, and @layout@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.PipelineLayout',--- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'-cmdPushConstants :: forall io-                  . (MonadIO io)-                 => -- | @commandBuffer@ is the command buffer in which the push constant update-                    -- will be recorded.-                    CommandBuffer-                 -> -- | @layout@ is the pipeline layout used to program the push constant-                    -- updates.-                    PipelineLayout-                 -> -- | @stageFlags@ is a bitmask of-                    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' specifying-                    -- the shader stages that will use the push constants in the updated range.-                    ShaderStageFlags-                 -> -- | @offset@ is the start offset of the push constant range to update, in-                    -- units of bytes.-                    ("offset" ::: Word32)-                 -> -- | @size@ is the size of the push constant range to update, in units of-                    -- bytes.-                    ("size" ::: Word32)-                 -> -- | @pValues@ is a pointer to an array of @size@ bytes containing the new-                    -- push constant values.-                    ("values" ::: Ptr ())-                 -> io ()-cmdPushConstants commandBuffer layout stageFlags offset size values = liftIO $ do-  let vkCmdPushConstantsPtr = pVkCmdPushConstants (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdPushConstantsPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPushConstants is null" Nothing Nothing-  let vkCmdPushConstants' = mkVkCmdPushConstants vkCmdPushConstantsPtr-  vkCmdPushConstants' (commandBufferHandle (commandBuffer)) (layout) (stageFlags) (offset) (size) (values)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBeginRenderPass-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct RenderPassBeginInfo) -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct RenderPassBeginInfo) -> SubpassContents -> IO ()---- | vkCmdBeginRenderPass - Begin a new render pass------ = Description------ After beginning a render pass instance, the command buffer is ready to--- record the commands for the first subpass of that render pass.------ == Valid Usage------ -   If any of the @initialLayout@ or @finalLayout@ member of the---     'Vulkan.Core10.Pass.AttachmentDescription' structures or the---     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'---     structures specified when creating the render pass specified in the---     @renderPass@ member of @pRenderPassBegin@ is---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'---     then the corresponding attachment image view of the framebuffer---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/---     have been created with a @usage@ value including---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'------ -   If any of the @initialLayout@ or @finalLayout@ member of the---     'Vulkan.Core10.Pass.AttachmentDescription' structures or the---     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'---     structures specified when creating the render pass specified in the---     @renderPass@ member of @pRenderPassBegin@ is---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'---     then the corresponding attachment image view of the framebuffer---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/---     have been created with a @usage@ value including---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'------ -   If any of the @initialLayout@ or @finalLayout@ member of the---     'Vulkan.Core10.Pass.AttachmentDescription' structures or the---     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'---     structures specified when creating the render pass specified in the---     @renderPass@ member of @pRenderPassBegin@ is---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'---     then the corresponding attachment image view of the framebuffer---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/---     have been created with a @usage@ value including---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'------ -   If any of the @stencilInitialLayout@ or @stencilFinalLayout@ member---     of the---     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'---     structures or the @stencilLayout@ member of the---     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'---     structures specified when creating the render pass specified in the---     @renderPass@ member of @pRenderPassBegin@ is---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'---     then the corresponding attachment image view of the framebuffer---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/---     have been created with a @usage@ value including---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'------ -   If any of the @initialLayout@ or @finalLayout@ member of the---     'Vulkan.Core10.Pass.AttachmentDescription' structures or the---     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'---     structures specified when creating the render pass specified in the---     @renderPass@ member of @pRenderPassBegin@ is---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'---     then the corresponding attachment image view of the framebuffer---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/---     have been created with a @usage@ value including---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'------ -   If any of the @initialLayout@ or @finalLayout@ member of the---     'Vulkan.Core10.Pass.AttachmentDescription' structures or the---     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'---     structures specified when creating the render pass specified in the---     @renderPass@ member of @pRenderPassBegin@ is---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'---     then the corresponding attachment image view of the framebuffer---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/---     have been created with a @usage@ value including---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'------ -   If any of the @initialLayout@ or @finalLayout@ member of the---     'Vulkan.Core10.Pass.AttachmentDescription' structures or the---     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'---     structures specified when creating the render pass specified in the---     @renderPass@ member of @pRenderPassBegin@ is---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'---     then the corresponding attachment image view of the framebuffer---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/---     have been created with a @usage@ value including---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'------ -   If any of the @initialLayout@ members of the---     'Vulkan.Core10.Pass.AttachmentDescription' structures specified when---     creating the render pass specified in the @renderPass@ member of---     @pRenderPassBegin@ is not---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', then each---     such @initialLayout@ /must/ be equal to the current layout of the---     corresponding attachment image subresource of the framebuffer---     specified in the @framebuffer@ member of @pRenderPassBegin@------ -   The @srcStageMask@ and @dstStageMask@ members of any element of the---     @pDependencies@ member of 'Vulkan.Core10.Pass.RenderPassCreateInfo'---     used to create @renderPass@ /must/ be supported by the capabilities---     of the queue family identified by the @queueFamilyIndex@ member of---     the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to create---     the command pool which @commandBuffer@ was allocated from------ -   For any attachment in @framebuffer@ that is used by @renderPass@ and---     is bound to memory locations that are also bound to another---     attachment used by @renderPass@, and if at least one of those uses---     causes either attachment to be written to, both attachments /must/---     have had the---     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'---     set------ -   Each element of the @pAttachments@ of @framebuffer@ that is---     referenced by any element of the @pInputAttachments@ of any element---     of @pSubpasses@ of @renderPass@ /must/ have---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features>---     containing at least---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'---     or---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'------ -   Each element of the @pAttachments@ of @framebuffer@ that is---     referenced by any element of the @pColorAttachments@ of any element---     of @pSubpasses@ of @renderPass@ /must/ have---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features>---     containing---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'------ -   Each element of the @pAttachments@ of @framebuffer@ that is---     referenced by any element of the @pResolveAttachments@ of any---     element of @pSubpasses@ of @renderPass@ /must/ have---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features>---     containing---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'------ -   Each element of the @pAttachments@ of @framebuffer@ that is---     referenced by any element of the @pDepthStencilAttachment@ of any---     element of @pSubpasses@ of @renderPass@ /must/ have---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features>---     containing---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pRenderPassBegin@ /must/ be a valid pointer to a valid---     'RenderPassBeginInfo' structure------ -   @contents@ /must/ be a valid---     'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called outside of a render pass instance------ -   @commandBuffer@ /must/ be a primary---     'Vulkan.Core10.Handles.CommandBuffer'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Graphics                                                                                                                            |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'RenderPassBeginInfo',--- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'-cmdBeginRenderPass :: forall a io-                    . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io)-                   => -- | @commandBuffer@ is the command buffer in which to record the command.-                      CommandBuffer-                   -> -- | @pRenderPassBegin@ is a pointer to a 'RenderPassBeginInfo' structure-                      -- specifying the render pass to begin an instance of, and the framebuffer-                      -- the instance uses.-                      (RenderPassBeginInfo a)-                   -> -- | @contents@ is a 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'-                      -- value specifying how the commands in the first subpass will be provided.-                      SubpassContents-                   -> io ()-cmdBeginRenderPass commandBuffer renderPassBegin contents = liftIO . evalContT $ do-  let vkCmdBeginRenderPassPtr = pVkCmdBeginRenderPass (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdBeginRenderPassPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginRenderPass is null" Nothing Nothing-  let vkCmdBeginRenderPass' = mkVkCmdBeginRenderPass vkCmdBeginRenderPassPtr-  pRenderPassBegin <- ContT $ withCStruct (renderPassBegin)-  lift $ vkCmdBeginRenderPass' (commandBufferHandle (commandBuffer)) (forgetExtensions pRenderPassBegin) (contents)-  pure $ ()---- | This function will call the supplied action between calls to--- 'cmdBeginRenderPass' and 'cmdEndRenderPass'------ Note that 'cmdEndRenderPass' is *not* called if an exception is thrown--- by the inner action.-cmdUseRenderPass :: forall a io r . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r-cmdUseRenderPass commandBuffer pRenderPassBegin contents a =-  (cmdBeginRenderPass commandBuffer pRenderPassBegin contents) *> a <* (cmdEndRenderPass commandBuffer)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdNextSubpass-  :: FunPtr (Ptr CommandBuffer_T -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> SubpassContents -> IO ()---- | vkCmdNextSubpass - Transition to the next subpass of a render pass------ = Description------ The subpass index for a render pass begins at zero when--- 'cmdBeginRenderPass' is recorded, and increments each time--- 'cmdNextSubpass' is recorded.------ Moving to the next subpass automatically performs any multisample--- resolve operations in the subpass being ended. End-of-subpass--- multisample resolves are treated as color attachment writes for the--- purposes of synchronization. This applies to resolve operations for both--- color and depth\/stencil attachments. That is, they are considered to--- execute in the--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'--- pipeline stage and their writes are synchronized with--- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.--- Synchronization between rendering within a subpass and any resolve--- operations at the end of the subpass occurs automatically, without need--- for explicit dependencies or pipeline barriers. However, if the resolve--- attachment is also used in a different subpass, an explicit dependency--- is needed.------ After transitioning to the next subpass, the application /can/ record--- the commands for that subpass.------ == Valid Usage------ -   The current subpass index /must/ be less than the number of---     subpasses in the render pass minus one------ -   This command /must/ not be recorded when transform feedback is---     active------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @contents@ /must/ be a valid---     'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called inside of a render pass instance------ -   @commandBuffer@ /must/ be a primary---     'Vulkan.Core10.Handles.CommandBuffer'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'-cmdNextSubpass :: forall io-                . (MonadIO io)-               => -- | @commandBuffer@ is the command buffer in which to record the command.-                  CommandBuffer-               -> -- | @contents@ specifies how the commands in the next subpass will be-                  -- provided, in the same fashion as the corresponding parameter of-                  -- 'cmdBeginRenderPass'.-                  SubpassContents-               -> io ()-cmdNextSubpass commandBuffer contents = liftIO $ do-  let vkCmdNextSubpassPtr = pVkCmdNextSubpass (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdNextSubpassPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdNextSubpass is null" Nothing Nothing-  let vkCmdNextSubpass' = mkVkCmdNextSubpass vkCmdNextSubpassPtr-  vkCmdNextSubpass' (commandBufferHandle (commandBuffer)) (contents)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdEndRenderPass-  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()---- | vkCmdEndRenderPass - End the current render pass------ = Description------ Ending a render pass instance performs any multisample resolve--- operations on the final subpass.------ == Valid Usage------ -   The current subpass index /must/ be equal to the number of subpasses---     in the render pass minus one------ -   This command /must/ not be recorded when transform feedback is---     active------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called inside of a render pass instance------ -   @commandBuffer@ /must/ be a primary---     'Vulkan.Core10.Handles.CommandBuffer'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdEndRenderPass :: forall io-                  . (MonadIO io)-                 => -- | @commandBuffer@ is the command buffer in which to end the current render-                    -- pass instance.-                    CommandBuffer-                 -> io ()-cmdEndRenderPass commandBuffer = liftIO $ do-  let vkCmdEndRenderPassPtr = pVkCmdEndRenderPass (deviceCmds (commandBuffer :: CommandBuffer))-  unless (vkCmdEndRenderPassPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndRenderPass is null" Nothing Nothing-  let vkCmdEndRenderPass' = mkVkCmdEndRenderPass vkCmdEndRenderPassPtr-  vkCmdEndRenderPass' (commandBufferHandle (commandBuffer))-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdExecuteCommands-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()---- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary--- command buffer------ = Description------ If any element of @pCommandBuffers@ was not recorded with the--- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'--- flag, and it was recorded into any other primary command buffer which is--- currently in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable or recording state>,--- that primary command buffer becomes--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.------ == Valid Usage------ -   Each element of @pCommandBuffers@ /must/ have been allocated with a---     @level@ of---     'Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'------ -   Each element of @pCommandBuffers@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>------ -   If any element of @pCommandBuffers@ was not recorded with the---     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'---     flag, it /must/ not be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>------ -   If any element of @pCommandBuffers@ was not recorded with the---     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'---     flag, it /must/ not have already been recorded to @commandBuffer@------ -   If any element of @pCommandBuffers@ was not recorded with the---     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'---     flag, it /must/ not appear more than once in @pCommandBuffers@------ -   Each element of @pCommandBuffers@ /must/ have been allocated from a---     'Vulkan.Core10.Handles.CommandPool' that was created for the same---     queue family as the 'Vulkan.Core10.Handles.CommandPool' from which---     @commandBuffer@ was allocated------ -   If 'cmdExecuteCommands' is being called within a render pass---     instance, that render pass instance /must/ have been begun with the---     @contents@ parameter of 'cmdBeginRenderPass' set to---     'Vulkan.Core10.Enums.SubpassContents.SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS'------ -   If 'cmdExecuteCommands' is being called within a render pass---     instance, each element of @pCommandBuffers@ /must/ have been---     recorded with the---     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'------ -   If 'cmdExecuteCommands' is being called within a render pass---     instance, each element of @pCommandBuffers@ /must/ have been---     recorded with---     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@subpass@---     set to the index of the subpass which the given command buffer will---     be executed in------ -   If 'cmdExecuteCommands' is being called within a render pass---     instance, the render passes specified in the---     @pBeginInfo->pInheritanceInfo->renderPass@ members of the---     'Vulkan.Core10.CommandBuffer.beginCommandBuffer' commands used to---     begin recording each element of @pCommandBuffers@ /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>---     with the current render pass------ -   If 'cmdExecuteCommands' is being called within a render pass---     instance, and any element of @pCommandBuffers@ was recorded with---     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@framebuffer@---     not equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE', that---     'Vulkan.Core10.Handles.Framebuffer' /must/ match the---     'Vulkan.Core10.Handles.Framebuffer' used in the current render pass---     instance------ -   If 'cmdExecuteCommands' is being called within a render pass---     instance that included---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'---     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of---     @pCommandBuffers@ /must/ have been recorded with---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'---     in the @pNext@ chain of---     'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'------ -   If 'cmdExecuteCommands' is being called within a render pass---     instance that included---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'---     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of---     @pCommandBuffers@ /must/ have been recorded with---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@transform@---     identical to---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@------ -   If 'cmdExecuteCommands' is being called within a render pass---     instance that included---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'---     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of---     @pCommandBuffers@ /must/ have been recorded with---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@renderArea@---     identical to 'RenderPassBeginInfo'::@renderArea@------ -   If 'cmdExecuteCommands' is not being called within a render pass---     instance, each element of @pCommandBuffers@ /must/ not have been---     recorded with the---     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>---     feature is not enabled, @commandBuffer@ /must/ not have any queries---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>------ -   If @commandBuffer@ has a---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,---     then each element of @pCommandBuffers@ /must/ have been recorded---     with---     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@occlusionQueryEnable@---     set to 'Vulkan.Core10.FundamentalTypes.TRUE'------ -   If @commandBuffer@ has a---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,---     then each element of @pCommandBuffers@ /must/ have been recorded---     with---     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@queryFlags@---     having all bits set that are set for the query------ -   If @commandBuffer@ has a---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' query---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,---     then each element of @pCommandBuffers@ /must/ have been recorded---     with---     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@pipelineStatistics@---     having all bits set that are set in the---     'Vulkan.Core10.Handles.QueryPool' the query uses------ -   Each element of @pCommandBuffers@ /must/ not begin any query types---     that are---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>---     in @commandBuffer@------ -   If @commandBuffer@ is a protected command buffer, then each element---     of @pCommandBuffers@ /must/ be a protected command buffer------ -   If @commandBuffer@ is an unprotected command buffer, then each---     element of @pCommandBuffers@ /must/ be an unprotected command buffer------ -   This command /must/ not be recorded when transform feedback is---     active------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pCommandBuffers@ /must/ be a valid pointer to an array of---     @commandBufferCount@ valid 'Vulkan.Core10.Handles.CommandBuffer'---     handles------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   @commandBuffer@ /must/ be a primary---     'Vulkan.Core10.Handles.CommandBuffer'------ -   @commandBufferCount@ /must/ be greater than @0@------ -   Both of @commandBuffer@, and the elements of @pCommandBuffers@---     /must/ have been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer'-cmdExecuteCommands :: forall io-                    . (MonadIO io)-                   => -- | @commandBuffer@ is a handle to a primary command buffer that the-                      -- secondary command buffers are executed in.-                      CommandBuffer-                   -> -- | @pCommandBuffers@ is a pointer to an array of @commandBufferCount@-                      -- secondary command buffer handles, which are recorded to execute in the-                      -- primary command buffer in the order they are listed in the array.-                      ("commandBuffers" ::: Vector CommandBuffer)-                   -> io ()-cmdExecuteCommands commandBuffer commandBuffers = liftIO . evalContT $ do-  let vkCmdExecuteCommandsPtr = pVkCmdExecuteCommands (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdExecuteCommandsPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdExecuteCommands is null" Nothing Nothing-  let vkCmdExecuteCommands' = mkVkCmdExecuteCommands vkCmdExecuteCommandsPtr-  pPCommandBuffers <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (commandBuffers)) * 8) 8-  lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (commandBufferHandle (e))) (commandBuffers)-  lift $ vkCmdExecuteCommands' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (commandBuffers)) :: Word32)) (pPCommandBuffers)-  pure $ ()----- | VkClearRect - Structure specifying a clear rectangle------ = Description------ The layers [@baseArrayLayer@, @baseArrayLayer@ + @layerCount@) counting--- from the base layer of the attachment image view are cleared.------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Rect2D', 'cmdClearAttachments'-data ClearRect = ClearRect-  { -- | @rect@ is the two-dimensional region to be cleared.-    rect :: Rect2D-  , -- | @baseArrayLayer@ is the first layer to be cleared.-    baseArrayLayer :: Word32-  , -- | @layerCount@ is the number of layers to clear.-    layerCount :: Word32-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ClearRect)-#endif-deriving instance Show ClearRect--instance ToCStruct ClearRect where-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ClearRect{..} f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Rect2D)) (rect) . ($ ())-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (baseArrayLayer)-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (layerCount)-    lift $ f-  cStructSize = 24-  cStructAlignment = 4-  pokeZeroCStruct p f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Rect2D)) (zero) . ($ ())-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)-    lift $ f--instance FromCStruct ClearRect where-  peekCStruct p = do-    rect <- peekCStruct @Rect2D ((p `plusPtr` 0 :: Ptr Rect2D))-    baseArrayLayer <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))-    layerCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    pure $ ClearRect-             rect baseArrayLayer layerCount--instance Zero ClearRect where-  zero = ClearRect-           zero-           zero-           zero----- | VkImageSubresourceLayers - Structure specifying an image subresource--- layers------ == Valid Usage------ -   If @aspectMask@ contains---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT', it---     /must/ not contain either of---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'------ -   @aspectMask@ /must/ not contain---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'------ -   @aspectMask@ /must/ not include---     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@------ -   @layerCount@ /must/ be greater than 0------ == Valid Usage (Implicit)------ -   @aspectMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values------ -   @aspectMask@ /must/ not be @0@------ = See Also------ 'BufferImageCopy',--- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferImageCopy2KHR',--- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags', 'ImageBlit',--- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageBlit2KHR', 'ImageCopy',--- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageCopy2KHR', 'ImageResolve',--- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageResolve2KHR'-data ImageSubresourceLayers = ImageSubresourceLayers-  { -- | @aspectMask@ is a combination of-    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits', selecting-    -- the color, depth and\/or stencil aspects to be copied.-    aspectMask :: ImageAspectFlags-  , -- | @mipLevel@ is the mipmap level to copy from.-    mipLevel :: Word32-  , -- | @baseArrayLayer@ and @layerCount@ are the starting layer and number of-    -- layers to copy.-    baseArrayLayer :: Word32-  , -- No documentation found for Nested "VkImageSubresourceLayers" "layerCount"-    layerCount :: Word32-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ImageSubresourceLayers)-#endif-deriving instance Show ImageSubresourceLayers--instance ToCStruct ImageSubresourceLayers where-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ImageSubresourceLayers{..} f = do-    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (mipLevel)-    poke ((p `plusPtr` 8 :: Ptr Word32)) (baseArrayLayer)-    poke ((p `plusPtr` 12 :: Ptr Word32)) (layerCount)-    f-  cStructSize = 16-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)-    f--instance FromCStruct ImageSubresourceLayers where-  peekCStruct p = do-    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))-    mipLevel <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    baseArrayLayer <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))-    layerCount <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))-    pure $ ImageSubresourceLayers-             aspectMask mipLevel baseArrayLayer layerCount--instance Storable ImageSubresourceLayers where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero ImageSubresourceLayers where-  zero = ImageSubresourceLayers-           zero-           zero-           zero-           zero----- | VkBufferCopy - Structure specifying a buffer copy operation------ == Valid Usage------ -   The @size@ /must/ be greater than @0@------ = See Also------ 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'cmdCopyBuffer'-data BufferCopy = BufferCopy-  { -- | @srcOffset@ is the starting offset in bytes from the start of-    -- @srcBuffer@.-    srcOffset :: DeviceSize-  , -- | @dstOffset@ is the starting offset in bytes from the start of-    -- @dstBuffer@.-    dstOffset :: DeviceSize-  , -- | @size@ is the number of bytes to copy.-    size :: DeviceSize-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (BufferCopy)-#endif-deriving instance Show BufferCopy--instance ToCStruct BufferCopy where-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p BufferCopy{..} f = do-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (srcOffset)-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (dstOffset)-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (size)-    f-  cStructSize = 24-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)-    f--instance FromCStruct BufferCopy where-  peekCStruct p = do-    srcOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))-    dstOffset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))-    size <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))-    pure $ BufferCopy-             srcOffset dstOffset size--instance Storable BufferCopy where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero BufferCopy where-  zero = BufferCopy-           zero-           zero-           zero----- | VkImageCopy - Structure specifying an image copy operation------ = Description------ For 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' images, copies are--- performed slice by slice starting with the @z@ member of the @srcOffset@--- or @dstOffset@, and copying @depth@ slices. For images with multiple--- layers, copies are performed layer by layer starting with the--- @baseArrayLayer@ member of the @srcSubresource@ or @dstSubresource@ and--- copying @layerCount@ layers. Image data /can/ be copied between images--- with different image types. If one image is--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and the other image is--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' with multiple layers, then--- each slice is copied to or from a different layer.------ Copies involving a--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>--- specify the region to be copied in terms of the /plane/ to be copied,--- not the coordinates of the multi-planar image. This means that copies--- accessing the R\/B planes of “@_422@” format images /must/ fit the--- copied region within half the @width@ of the parent image, and that--- copies accessing the R\/B planes of “@_420@” format images /must/ fit--- the copied region within half the @width@ and @height@ of the parent--- image.------ == Valid Usage------ -   The number of slices of the @extent@ (for 3D) or layers of the---     @srcSubresource@ (for non-3D) /must/ match the number of slices of---     the @extent@ (for 3D) or layers of the @dstSubresource@ (for non-3D)------ == Valid Usage (Implicit)------ -   @srcSubresource@ /must/ be a valid 'ImageSubresourceLayers'---     structure------ -   @dstSubresource@ /must/ be a valid 'ImageSubresourceLayers'---     structure------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Extent3D', 'ImageSubresourceLayers',--- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'cmdCopyImage'-data ImageCopy = ImageCopy-  { -- | @srcSubresource@ and @dstSubresource@ are 'ImageSubresourceLayers'-    -- structures specifying the image subresources of the images used for the-    -- source and destination image data, respectively.-    srcSubresource :: ImageSubresourceLayers-  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets-    -- in texels of the sub-regions of the source and destination image data.-    srcOffset :: Offset3D-  , -- No documentation found for Nested "VkImageCopy" "dstSubresource"-    dstSubresource :: ImageSubresourceLayers-  , -- No documentation found for Nested "VkImageCopy" "dstOffset"-    dstOffset :: Offset3D-  , -- | @extent@ is the size in texels of the image to copy in @width@, @height@-    -- and @depth@.-    extent :: Extent3D-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ImageCopy)-#endif-deriving instance Show ImageCopy--instance ToCStruct ImageCopy where-  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ImageCopy{..} f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (srcOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (dstOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (extent) . ($ ())-    lift $ f-  cStructSize = 68-  cStructAlignment = 4-  pokeZeroCStruct p f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (zero) . ($ ())-    lift $ f--instance FromCStruct ImageCopy where-  peekCStruct p = do-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))-    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 16 :: Ptr Offset3D))-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers))-    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 44 :: Ptr Offset3D))-    extent <- peekCStruct @Extent3D ((p `plusPtr` 56 :: Ptr Extent3D))-    pure $ ImageCopy-             srcSubresource srcOffset dstSubresource dstOffset extent--instance Zero ImageCopy where-  zero = ImageCopy-           zero-           zero-           zero-           zero-           zero----- | VkImageBlit - Structure specifying an image blit operation------ = Description------ For each element of the @pRegions@ array, a blit operation is performed--- the specified source and destination regions.------ == Valid Usage------ -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@---     /must/ match------ -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@---     /must/ match------ == Valid Usage (Implicit)------ -   @srcSubresource@ /must/ be a valid 'ImageSubresourceLayers'---     structure------ -   @dstSubresource@ /must/ be a valid 'ImageSubresourceLayers'---     structure------ = See Also------ 'ImageSubresourceLayers', 'Vulkan.Core10.FundamentalTypes.Offset3D',--- 'cmdBlitImage'-data ImageBlit = ImageBlit-  { -- | @srcSubresource@ is the subresource to blit from.-    srcSubresource :: ImageSubresourceLayers-  , -- | @srcOffsets@ is a pointer to an array of two-    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the-    -- bounds of the source region within @srcSubresource@.-    srcOffsets :: (Offset3D, Offset3D)-  , -- | @dstSubresource@ is the subresource to blit into.-    dstSubresource :: ImageSubresourceLayers-  , -- | @dstOffsets@ is a pointer to an array of two-    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the-    -- bounds of the destination region within @dstSubresource@.-    dstOffsets :: (Offset3D, Offset3D)-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ImageBlit)-#endif-deriving instance Show ImageBlit--instance ToCStruct ImageBlit where-  withCStruct x f = allocaBytesAligned 80 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ImageBlit{..} f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())-    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))-    case (srcOffsets) of-      (e0, e1) -> do-        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())-        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())-    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))-    case (dstOffsets) of-      (e0, e1) -> do-        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())-        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())-    lift $ f-  cStructSize = 80-  cStructAlignment = 4-  pokeZeroCStruct p f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))-    case ((zero, zero)) of-      (e0, e1) -> do-        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())-        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))-    case ((zero, zero)) of-      (e0, e1) -> do-        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())-        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())-    lift $ f--instance FromCStruct ImageBlit where-  peekCStruct p = do-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))-    let psrcOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))-    srcOffsets0 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 0 :: Ptr Offset3D))-    srcOffsets1 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 12 :: Ptr Offset3D))-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers))-    let pdstOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))-    dstOffsets0 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 0 :: Ptr Offset3D))-    dstOffsets1 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 12 :: Ptr Offset3D))-    pure $ ImageBlit-             srcSubresource ((srcOffsets0, srcOffsets1)) dstSubresource ((dstOffsets0, dstOffsets1))--instance Zero ImageBlit where-  zero = ImageBlit-           zero-           (zero, zero)-           zero-           (zero, zero)----- | VkBufferImageCopy - Structure specifying a buffer image copy operation------ = Description------ When copying to or from a depth or stencil aspect, the data in buffer--- memory uses a layout that is a (mostly) tightly packed representation of--- the depth or stencil data. Specifically:------ -   data copied to or from the stencil aspect of any depth\/stencil---     format is tightly packed with one---     'Vulkan.Core10.Enums.Format.FORMAT_S8_UINT' value per texel.------ -   data copied to or from the depth aspect of a---     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM' or---     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM_S8_UINT' format is---     tightly packed with one---     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM' value per texel.------ -   data copied to or from the depth aspect of a---     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT' or---     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT_S8_UINT' format is---     tightly packed with one---     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT' value per texel.------ -   data copied to or from the depth aspect of a---     'Vulkan.Core10.Enums.Format.FORMAT_X8_D24_UNORM_PACK32' or---     'Vulkan.Core10.Enums.Format.FORMAT_D24_UNORM_S8_UINT' format is---     packed with one 32-bit word per texel with the D24 value in the LSBs---     of the word, and undefined values in the eight MSBs.------ Note------ To copy both the depth and stencil aspects of a depth\/stencil format,--- two entries in @pRegions@ /can/ be used, where one specifies the depth--- aspect in @imageSubresource@, and the other specifies the stencil--- aspect.------ Because depth or stencil aspect buffer to image copies /may/ require--- format conversions on some implementations, they are not supported on--- queues that do not support graphics.------ When copying to a depth aspect, and the--- @VK_EXT_depth_range_unrestricted@ extension is not enabled, the data in--- buffer memory /must/ be in the range [0,1], or the resulting values are--- undefined.------ Copies are done layer by layer starting with image layer--- @baseArrayLayer@ member of @imageSubresource@. @layerCount@ layers are--- copied from the source image or to the destination image.------ For purpose of valid usage statements here and in related copy commands,--- a /blocked image/ is defined as:------ -   a image with a /single-plane/, “@_422@” format, which is treated as---     a format with a 2 × 1 compressed texel block, or------ -   a compressed image.------ == Valid Usage------ -   @bufferRowLength@ /must/ be @0@, or greater than or equal to the---     @width@ member of @imageExtent@------ -   @bufferImageHeight@ /must/ be @0@, or greater than or equal to the---     @height@ member of @imageExtent@------ -   The @aspectMask@ member of @imageSubresource@ /must/ only have a---     single bit set------ == Valid Usage (Implicit)------ -   @imageSubresource@ /must/ be a valid 'ImageSubresourceLayers'---     structure------ = See Also------ 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.FundamentalTypes.Extent3D', 'ImageSubresourceLayers',--- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'cmdCopyBufferToImage',--- 'cmdCopyImageToBuffer'-data BufferImageCopy = BufferImageCopy-  { -- | @bufferOffset@ is the offset in bytes from the start of the buffer-    -- object where the image data is copied from or to.-    bufferOffset :: DeviceSize-  , -- | @bufferRowLength@ and @bufferImageHeight@ specify in texels a subregion-    -- of a larger two- or three-dimensional image in buffer memory, and-    -- control the addressing calculations. If either of these values is zero,-    -- that aspect of the buffer memory is considered to be tightly packed-    -- according to the @imageExtent@.-    bufferRowLength :: Word32-  , -- No documentation found for Nested "VkBufferImageCopy" "bufferImageHeight"-    bufferImageHeight :: Word32-  , -- | @imageSubresource@ is a 'ImageSubresourceLayers' used to specify the-    -- specific image subresources of the image used for the source or-    -- destination image data.-    imageSubresource :: ImageSubresourceLayers-  , -- | @imageOffset@ selects the initial @x@, @y@, @z@ offsets in texels of the-    -- sub-region of the source or destination image data.-    imageOffset :: Offset3D-  , -- | @imageExtent@ is the size in texels of the image to copy in @width@,-    -- @height@ and @depth@.-    imageExtent :: Extent3D-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (BufferImageCopy)-#endif-deriving instance Show BufferImageCopy--instance ToCStruct BufferImageCopy where-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p BufferImageCopy{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (bufferOffset)-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (bufferRowLength)-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (bufferImageHeight)-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (imageSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (imageOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent3D)) (imageExtent) . ($ ())-    lift $ f-  cStructSize = 56-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent3D)) (zero) . ($ ())-    lift $ f--instance FromCStruct BufferImageCopy where-  peekCStruct p = do-    bufferOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))-    bufferRowLength <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))-    bufferImageHeight <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))-    imageSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))-    imageOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))-    imageExtent <- peekCStruct @Extent3D ((p `plusPtr` 44 :: Ptr Extent3D))-    pure $ BufferImageCopy-             bufferOffset bufferRowLength bufferImageHeight imageSubresource imageOffset imageExtent--instance Zero BufferImageCopy where-  zero = BufferImageCopy-           zero-           zero-           zero-           zero-           zero-           zero----- | VkImageResolve - Structure specifying an image resolve operation------ == Valid Usage------ -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@---     /must/ only contain---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@---     /must/ match------ == Valid Usage (Implicit)------ -   @srcSubresource@ /must/ be a valid 'ImageSubresourceLayers'---     structure------ -   @dstSubresource@ /must/ be a valid 'ImageSubresourceLayers'---     structure------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Extent3D', 'ImageSubresourceLayers',--- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'cmdResolveImage'-data ImageResolve = ImageResolve-  { -- | @srcSubresource@ and @dstSubresource@ are 'ImageSubresourceLayers'-    -- structures specifying the image subresources of the images used for the-    -- source and destination image data, respectively. Resolve of-    -- depth\/stencil images is not supported.-    srcSubresource :: ImageSubresourceLayers-  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets-    -- in texels of the sub-regions of the source and destination image data.-    srcOffset :: Offset3D-  , -- No documentation found for Nested "VkImageResolve" "dstSubresource"-    dstSubresource :: ImageSubresourceLayers-  , -- No documentation found for Nested "VkImageResolve" "dstOffset"-    dstOffset :: Offset3D-  , -- | @extent@ is the size in texels of the source image to resolve in-    -- @width@, @height@ and @depth@.-    extent :: Extent3D-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ImageResolve)-#endif-deriving instance Show ImageResolve--instance ToCStruct ImageResolve where-  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ImageResolve{..} f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (srcOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (dstOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (extent) . ($ ())-    lift $ f-  cStructSize = 68-  cStructAlignment = 4-  pokeZeroCStruct p f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (zero) . ($ ())-    lift $ f--instance FromCStruct ImageResolve where-  peekCStruct p = do-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))-    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 16 :: Ptr Offset3D))-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers))-    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 44 :: Ptr Offset3D))-    extent <- peekCStruct @Extent3D ((p `plusPtr` 56 :: Ptr Extent3D))-    pure $ ImageResolve-             srcSubresource srcOffset dstSubresource dstOffset extent--instance Zero ImageResolve where-  zero = ImageResolve-           zero-           zero-           zero-           zero-           zero----- | VkRenderPassBeginInfo - Structure specifying render pass begin info------ = Description------ @renderArea@ is the render area that is affected by the render pass--- instance. The effects of attachment load, store and multisample resolve--- operations are restricted to the pixels whose x and y coordinates fall--- within the render area on all attachments. The render area extends to--- all layers of @framebuffer@. The application /must/ ensure (using--- scissor if necessary) that all rendering is contained within the render--- area. The render area, after any transform specified by--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@--- is applied, /must/ be contained within the framebuffer dimensions.------ If--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>--- is enabled, then @renderArea@ /must/ equal the framebuffer--- pre-transformed dimensions. After @renderArea@ has been transformed by--- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@,--- the resulting render area /must/ be equal to the framebuffer dimensions.------ When multiview is enabled, the resolve operation at the end of a subpass--- applies to all views in the view mask.------ Note------ There /may/ be a performance cost for using a render area smaller than--- the framebuffer, unless it matches the render area granularity for the--- render pass.------ == Valid Usage------ -   @clearValueCount@ /must/ be greater than the largest attachment---     index in @renderPass@ that specifies a @loadOp@ (or @stencilLoadOp@,---     if the attachment has a depth\/stencil format) of---     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'------ -   @renderPass@ /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>---     with the @renderPass@ member of the---     'Vulkan.Core10.Pass.FramebufferCreateInfo' structure specified when---     creating @framebuffer@------ -   If the @pNext@ chain does not contain---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'---     or its @deviceRenderAreaCount@ member is equal to 0,---     @renderArea.offset.x@ /must/ be greater than or equal to 0------ -   If the @pNext@ chain does not contain---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'---     or its @deviceRenderAreaCount@ member is equal to 0,---     @renderArea.offset.y@ /must/ be greater than or equal to 0------ -   If the @pNext@ chain does not contain---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'---     or its @deviceRenderAreaCount@ member is equal to 0,---     @renderArea.offset.x@ + @renderArea.offset.width@ /must/ be less---     than or equal to 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@width@---     the @framebuffer@ was created with------ -   If the @pNext@ chain does not contain---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'---     or its @deviceRenderAreaCount@ member is equal to 0,---     @renderArea.offset.y@ + @renderArea.offset.height@ /must/ be less---     than or equal to---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@height@ the---     @framebuffer@ was created with------ -   If the @pNext@ chain contains---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',---     the @offset.x@ member of each element of @pDeviceRenderAreas@ /must/---     be greater than or equal to 0------ -   If the @pNext@ chain contains---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',---     the @offset.y@ member of each element of @pDeviceRenderAreas@ /must/---     be greater than or equal to 0------ -   If the @pNext@ chain contains---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',---     @offset.x@ + @offset.width@ of each element of @pDeviceRenderAreas@---     /must/ be less than or equal to---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@width@ the---     @framebuffer@ was created with------ -   If the @pNext@ chain contains---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',---     @offset.y@ + @offset.height@ of each element of @pDeviceRenderAreas@---     /must/ be less than or equal to---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@height@ the---     @framebuffer@ was created with------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that did---     not include---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     and the @pNext@ chain includes a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure, its @attachmentCount@ /must/ be zero------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     the @attachmentCount@ of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be equal to the value---     of---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@attachmentImageInfoCount@---     used to create @framebuffer@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ have been created on---     the same 'Vulkan.Core10.Handles.Device' as @framebuffer@ and---     @renderPass@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' of an image created with a value---     of 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ equal to the---     @flags@ member of the corresponding element of---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@---     used to create @framebuffer@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' of an image created with a value---     of 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ equal to the---     @usage@ member of the corresponding element of---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@---     used to create @framebuffer@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' with a width equal to the @width@---     member of the corresponding element of---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@---     used to create @framebuffer@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' with a height equal to the---     @height@ member of the corresponding element of---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@---     used to create @framebuffer@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' of an image created with a value---     of---     'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@subresourceRange.layerCount@---     equal to the @layerCount@ member of the corresponding element of---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@---     used to create @framebuffer@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' of an image created with a value---     of---     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@viewFormatCount@---     equal to the @viewFormatCount@ member of the corresponding element---     of---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@---     used to create @framebuffer@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' of an image created with a set of---     elements in---     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@pViewFormats@---     equal to the set of elements in the @pViewFormats@ member of the---     corresponding element of---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@---     used to create @framebuffer@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' of an image created with a value---     of 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@format@ equal to---     the corresponding value of---     'Vulkan.Core10.Pass.AttachmentDescription'::@format@ in @renderPass@------ -   If @framebuffer@ was created with a---     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@ value that---     included---     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',---     each element of the @pAttachments@ member of a---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'---     structure included in the @pNext@ chain /must/ be a---     'Vulkan.Core10.Handles.ImageView' of an image created with a value---     of 'Vulkan.Core10.Image.ImageCreateInfo'::@samples@ equal to the---     corresponding value of---     'Vulkan.Core10.Pass.AttachmentDescription'::@samples@ in---     @renderPass@------ -   If the @pNext@ chain includes---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',---     @renderArea.offset@ /must/ equal (0,0)------ -   If the @pNext@ chain includes---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',---     @renderArea.extent@ transformed by---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@---     /must/ equal the @framebuffer@ dimensions------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_BEGIN_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---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',---     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',---     'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT',---     or---     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'---     handle------ -   @framebuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Framebuffer'---     handle------ -   If @clearValueCount@ is not @0@, @pClearValues@ /must/ be a valid---     pointer to an array of @clearValueCount@ 'ClearValue' unions------ -   Both of @framebuffer@, and @renderPass@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'ClearValue', 'Vulkan.Core10.Handles.Framebuffer',--- 'Vulkan.Core10.FundamentalTypes.Rect2D',--- 'Vulkan.Core10.Handles.RenderPass',--- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdBeginRenderPass',--- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdBeginRenderPass2',--- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR'-data RenderPassBeginInfo (es :: [Type]) = RenderPassBeginInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @renderPass@ is the render pass to begin an instance of.-    renderPass :: RenderPass-  , -- | @framebuffer@ is the framebuffer containing the attachments that are-    -- used with the render pass.-    framebuffer :: Framebuffer-  , -- | @renderArea@ is the render area that is affected by the render pass-    -- instance, and is described in more detail below.-    renderArea :: Rect2D-  , -- | @pClearValues@ is a pointer to an array of @clearValueCount@-    -- 'ClearValue' structures that contains clear values for each attachment,-    -- if the attachment uses a @loadOp@ value of-    -- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' or if-    -- the attachment has a depth\/stencil format and uses a @stencilLoadOp@-    -- value of-    -- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'. The-    -- array is indexed by attachment number. Only elements corresponding to-    -- cleared attachments are used. Other elements of @pClearValues@ are-    -- ignored.-    clearValues :: Vector ClearValue-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (RenderPassBeginInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (RenderPassBeginInfo es)--instance Extensible RenderPassBeginInfo where-  extensibleType = STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO-  setNext x next = x{next = next}-  getNext RenderPassBeginInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderPassBeginInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @RenderPassTransformBeginInfoQCOM = Just f-    | Just Refl <- eqT @e @RenderPassAttachmentBeginInfo = Just f-    | Just Refl <- eqT @e @RenderPassSampleLocationsBeginInfoEXT = Just f-    | Just Refl <- eqT @e @DeviceGroupRenderPassBeginInfo = Just f-    | otherwise = Nothing--instance (Extendss RenderPassBeginInfo es, PokeChain es) => ToCStruct (RenderPassBeginInfo es) where-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p RenderPassBeginInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (renderPass)-    lift $ poke ((p `plusPtr` 24 :: Ptr Framebuffer)) (framebuffer)-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (renderArea) . ($ ())-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (clearValues)) :: Word32))-    pPClearValues' <- ContT $ allocaBytesAligned @ClearValue ((Data.Vector.length (clearValues)) * 16) 4-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPClearValues' `plusPtr` (16 * (i)) :: Ptr ClearValue) (e) . ($ ())) (clearValues)-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr ClearValue))) (pPClearValues')-    lift $ f-  cStructSize = 64-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr Framebuffer)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (zero) . ($ ())-    pPClearValues' <- ContT $ allocaBytesAligned @ClearValue ((Data.Vector.length (mempty)) * 16) 4-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPClearValues' `plusPtr` (16 * (i)) :: Ptr ClearValue) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr ClearValue))) (pPClearValues')-    lift $ f--instance es ~ '[] => Zero (RenderPassBeginInfo es) where-  zero = RenderPassBeginInfo-           ()-           zero-           zero-           zero-           mempty----- | VkClearDepthStencilValue - Structure specifying a clear depth stencil--- value------ == Valid Usage------ -   Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled---     @depth@ /must/ be between @0.0@ and @1.0@, inclusive------ = See Also------ 'ClearValue', 'cmdClearDepthStencilImage'-data ClearDepthStencilValue = ClearDepthStencilValue-  { -- | @depth@ is the clear value for the depth aspect of the depth\/stencil-    -- attachment. It is a floating-point value which is automatically-    -- converted to the attachment’s format.-    depth :: Float-  , -- | @stencil@ is the clear value for the stencil aspect of the-    -- depth\/stencil attachment. It is a 32-bit integer value which is-    -- converted to the attachment’s format by taking the appropriate number of-    -- LSBs.-    stencil :: Word32-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ClearDepthStencilValue)-#endif-deriving instance Show ClearDepthStencilValue--instance ToCStruct ClearDepthStencilValue where-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ClearDepthStencilValue{..} f = do-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (depth))-    poke ((p `plusPtr` 4 :: Ptr Word32)) (stencil)-    f-  cStructSize = 8-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    f--instance FromCStruct ClearDepthStencilValue where-  peekCStruct p = do-    depth <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))-    stencil <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    pure $ ClearDepthStencilValue-             ((\(CFloat a) -> a) depth) stencil--instance Storable ClearDepthStencilValue where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero ClearDepthStencilValue where-  zero = ClearDepthStencilValue-           zero-           zero----- | VkClearAttachment - Structure specifying a clear attachment------ = Description------ No memory barriers are needed between 'cmdClearAttachments' and--- preceding or subsequent draw or attachment clear commands in the same--- subpass.------ The 'cmdClearAttachments' command is not affected by the bound pipeline--- state.------ Attachments /can/ also be cleared at the beginning of a render pass--- instance by setting @loadOp@ (or @stencilLoadOp@) of--- 'Vulkan.Core10.Pass.AttachmentDescription' to--- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', as--- described for 'Vulkan.Core10.Pass.createRenderPass'.------ == Valid Usage------ -   If @aspectMask@ includes---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT', it---     /must/ not include---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'------ -   @aspectMask@ /must/ not include---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'------ -   @aspectMask@ /must/ not include---     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@------ -   @clearValue@ /must/ be a valid 'ClearValue' union------ == Valid Usage (Implicit)------ -   @aspectMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values------ -   @aspectMask@ /must/ not be @0@+-- -   #VUID-vkCmdBindPipeline-pipelineBindPoint-00777# If+--     @pipelineBindPoint@ is+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE',+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdBindPipeline-pipelineBindPoint-00778# If+--     @pipelineBindPoint@ is+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBindPipeline-pipelineBindPoint-00779# If+--     @pipelineBindPoint@ is+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE',+--     @pipeline@ /must/ be a compute pipeline+--+-- -   #VUID-vkCmdBindPipeline-pipelineBindPoint-00780# If+--     @pipelineBindPoint@ is+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS',+--     @pipeline@ /must/ be a graphics pipeline+--+-- -   #VUID-vkCmdBindPipeline-pipeline-00781# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-variableMultisampleRate variable multisample rate>+--     feature is not supported, @pipeline@ is a graphics pipeline, the+--     current subpass+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments uses no attachments>,+--     and this is not the first call to this function with a graphics+--     pipeline after transitioning to the current subpass, then the sample+--     count specified by this pipeline /must/ match that set in the+--     previous pipeline+--+-- -   #VUID-vkCmdBindPipeline-variableSampleLocations-01525# If+--     'Vulkan.Extensions.VK_EXT_sample_locations.PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', and @pipeline@ is a+--     graphics pipeline created with a+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'+--     structure having its @sampleLocationsEnable@ member set to+--     'Vulkan.Core10.FundamentalTypes.TRUE' but without+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'+--     enabled then the current render pass instance /must/ have been begun+--     by specifying a+--     'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT'+--     structure whose @pPostSubpassSampleLocations@ member contains an+--     element with a @subpassIndex@ matching the current subpass index and+--     the @sampleLocationsInfo@ member of that element /must/ match the+--     @sampleLocationsInfo@ specified in+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'+--     when the pipeline was created+--+-- -   #VUID-vkCmdBindPipeline-None-02323# This command /must/ not be+--     recorded when transform feedback is active+--+-- -   #VUID-vkCmdBindPipeline-pipelineBindPoint-02391# If+--     @pipelineBindPoint@ is+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR',+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdBindPipeline-pipelineBindPoint-02392# If+--     @pipelineBindPoint@ is+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR',+--     the @pipeline@ /must/ be a ray tracing pipeline+--+-- -   #VUID-vkCmdBindPipeline-pipeline-03382# The @pipeline@ /must/ not+--     have been created with+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'+--     set+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBindPipeline-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBindPipeline-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value+--+-- -   #VUID-vkCmdBindPipeline-pipeline-parameter# @pipeline@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Pipeline' handle+--+-- -   #VUID-vkCmdBindPipeline-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBindPipeline-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdBindPipeline-commonparent# Both of @commandBuffer@, and+--     @pipeline@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Pipeline',+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'+cmdBindPipeline :: forall io+                 . (MonadIO io)+                => -- | @commandBuffer@ is the command buffer that the pipeline will be bound+                   -- to.+                   CommandBuffer+                -> -- | @pipelineBindPoint@ is a+                   -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value+                   -- specifying to which bind point the pipeline is bound. Binding one does+                   -- not disturb the others.+                   PipelineBindPoint+                -> -- | @pipeline@ is the pipeline to be bound.+                   Pipeline+                -> io ()+cmdBindPipeline commandBuffer pipelineBindPoint pipeline = liftIO $ do+  let vkCmdBindPipelinePtr = pVkCmdBindPipeline (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdBindPipelinePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindPipeline is null" Nothing Nothing+  let vkCmdBindPipeline' = mkVkCmdBindPipeline vkCmdBindPipelinePtr+  vkCmdBindPipeline' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (pipeline)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetViewport+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Viewport -> IO ()++-- | vkCmdSetViewport - Set the viewport on a command buffer+--+-- = Description+--+-- The viewport parameters taken from element i of @pViewports@ replace the+-- current state for the viewport index @firstViewport@ + i, for i in [0,+-- @viewportCount@).+--+-- == Valid Usage+--+-- -   #VUID-vkCmdSetViewport-firstViewport-01223# The sum of+--     @firstViewport@ and @viewportCount@ /must/ be between @1@ and+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,+--     inclusive+--+-- -   #VUID-vkCmdSetViewport-firstViewport-01224# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+--     feature is not enabled, @firstViewport@ /must/ be @0@+--+-- -   #VUID-vkCmdSetViewport-viewportCount-01225# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+--     feature is not enabled, @viewportCount@ /must/ be @1@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetViewport-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetViewport-pViewports-parameter# @pViewports@ /must/ be+--     a valid pointer to an array of @viewportCount@ valid+--     'Vulkan.Core10.Pipeline.Viewport' structures+--+-- -   #VUID-vkCmdSetViewport-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetViewport-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdSetViewport-viewportCount-arraylength# @viewportCount@+--     /must/ be greater than @0@+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Pipeline.Viewport'+cmdSetViewport :: forall io+                . (MonadIO io)+               => -- | @commandBuffer@ is the command buffer into which the command will be+                  -- recorded.+                  CommandBuffer+               -> -- | @firstViewport@ is the index of the first viewport whose parameters are+                  -- updated by the command.+                  ("firstViewport" ::: Word32)+               -> -- | @pViewports@ is a pointer to an array of+                  -- 'Vulkan.Core10.Pipeline.Viewport' structures specifying viewport+                  -- parameters.+                  ("viewports" ::: Vector Viewport)+               -> io ()+cmdSetViewport commandBuffer firstViewport viewports = liftIO . evalContT $ do+  let vkCmdSetViewportPtr = pVkCmdSetViewport (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdSetViewportPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetViewport is null" Nothing Nothing+  let vkCmdSetViewport' = mkVkCmdSetViewport vkCmdSetViewportPtr+  pPViewports <- ContT $ allocaBytesAligned @Viewport ((Data.Vector.length (viewports)) * 24) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e) . ($ ())) (viewports)+  lift $ vkCmdSetViewport' (commandBufferHandle (commandBuffer)) (firstViewport) ((fromIntegral (Data.Vector.length $ (viewports)) :: Word32)) (pPViewports)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetScissor+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Rect2D -> IO ()++-- | vkCmdSetScissor - Set the dynamic scissor rectangles on a command buffer+--+-- = Description+--+-- The scissor rectangles taken from element i of @pScissors@ replace the+-- current state for the scissor index @firstScissor@ + i, for i in [0,+-- @scissorCount@).+--+-- This command sets the state for a given draw when the graphics pipeline+-- is created with 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR'+-- set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdSetScissor-firstScissor-00592# The sum of @firstScissor@+--     and @scissorCount@ /must/ be between @1@ and+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@,+--     inclusive+--+-- -   #VUID-vkCmdSetScissor-firstScissor-00593# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+--     feature is not enabled, @firstScissor@ /must/ be @0@+--+-- -   #VUID-vkCmdSetScissor-scissorCount-00594# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+--     feature is not enabled, @scissorCount@ /must/ be @1@+--+-- -   #VUID-vkCmdSetScissor-x-00595# The @x@ and @y@ members of @offset@+--     member of any element of @pScissors@ /must/ be greater than or equal+--     to @0@+--+-- -   #VUID-vkCmdSetScissor-offset-00596# Evaluation of (@offset.x@ ++--     @extent.width@) /must/ not cause a signed integer addition overflow+--     for any element of @pScissors@+--+-- -   #VUID-vkCmdSetScissor-offset-00597# Evaluation of (@offset.y@ ++--     @extent.height@) /must/ not cause a signed integer addition overflow+--     for any element of @pScissors@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetScissor-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetScissor-pScissors-parameter# @pScissors@ /must/ be a+--     valid pointer to an array of @scissorCount@+--     'Vulkan.Core10.FundamentalTypes.Rect2D' structures+--+-- -   #VUID-vkCmdSetScissor-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetScissor-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdSetScissor-scissorCount-arraylength# @scissorCount@+--     /must/ be greater than @0@+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.Rect2D'+cmdSetScissor :: forall io+               . (MonadIO io)+              => -- | @commandBuffer@ is the command buffer into which the command will be+                 -- recorded.+                 CommandBuffer+              -> -- | @firstScissor@ is the index of the first scissor whose state is updated+                 -- by the command.+                 ("firstScissor" ::: Word32)+              -> -- | @pScissors@ is a pointer to an array of+                 -- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures defining scissor+                 -- rectangles.+                 ("scissors" ::: Vector Rect2D)+              -> io ()+cmdSetScissor commandBuffer firstScissor scissors = liftIO . evalContT $ do+  let vkCmdSetScissorPtr = pVkCmdSetScissor (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdSetScissorPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetScissor is null" Nothing Nothing+  let vkCmdSetScissor' = mkVkCmdSetScissor vkCmdSetScissorPtr+  pPScissors <- ContT $ allocaBytesAligned @Rect2D ((Data.Vector.length (scissors)) * 16) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) (scissors)+  lift $ vkCmdSetScissor' (commandBufferHandle (commandBuffer)) (firstScissor) ((fromIntegral (Data.Vector.length $ (scissors)) :: Word32)) (pPScissors)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetLineWidth+  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> IO ()++-- | vkCmdSetLineWidth - Set the dynamic line width state+--+-- == Valid Usage+--+-- -   #VUID-vkCmdSetLineWidth-lineWidth-00788# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-wideLines wide lines>+--     feature is not enabled, @lineWidth@ /must/ be @1.0@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetLineWidth-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetLineWidth-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetLineWidth-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdSetLineWidth :: forall io+                 . (MonadIO io)+                => -- | @commandBuffer@ is the command buffer into which the command will be+                   -- recorded.+                   CommandBuffer+                -> -- | @lineWidth@ is the width of rasterized line segments.+                   ("lineWidth" ::: Float)+                -> io ()+cmdSetLineWidth commandBuffer lineWidth = liftIO $ do+  let vkCmdSetLineWidthPtr = pVkCmdSetLineWidth (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdSetLineWidthPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetLineWidth is null" Nothing Nothing+  let vkCmdSetLineWidth' = mkVkCmdSetLineWidth vkCmdSetLineWidthPtr+  vkCmdSetLineWidth' (commandBufferHandle (commandBuffer)) (CFloat (lineWidth))+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetDepthBias+  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> CFloat -> IO ()++-- | vkCmdSetDepthBias - Set the depth bias dynamic state+--+-- = Description+--+-- If @depthBiasEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE', no depth+-- bias is applied and the fragment’s depth values are unchanged.+--+-- @depthBiasSlopeFactor@ scales the maximum depth slope of the polygon,+-- and @depthBiasConstantFactor@ scales an implementation-dependent+-- constant that relates to the usable resolution of the depth buffer. The+-- resulting values are summed to produce the depth bias value which is+-- then clamped to a minimum or maximum value specified by+-- @depthBiasClamp@. @depthBiasSlopeFactor@, @depthBiasConstantFactor@, and+-- @depthBiasClamp@ /can/ each be positive, negative, or zero.+--+-- The maximum depth slope m of a triangle is+--+-- \[m = \sqrt{ \left({{\partial z_f} \over {\partial x_f}}\right)^2+--         +  \left({{\partial z_f} \over {\partial y_f}}\right)^2}\]+--+-- where (xf, yf, zf) is a point on the triangle. m /may/ be approximated+-- as+--+-- \[m = \max\left( \left| { {\partial z_f} \over {\partial x_f} } \right|,+--                \left| { {\partial z_f} \over {\partial y_f} } \right|+--        \right).\]+--+-- The minimum resolvable difference r is an implementation-dependent+-- parameter that depends on the depth buffer representation. It is the+-- smallest difference in framebuffer coordinate z values that is+-- guaranteed to remain distinct throughout polygon rasterization and in+-- the depth buffer. All pairs of fragments generated by the rasterization+-- of two polygons with otherwise identical vertices, but @z@f values that+-- differ by r, will have distinct depth values.+--+-- For fixed-point depth buffer representations, r is constant throughout+-- the range of the entire depth buffer. For floating-point depth buffers,+-- there is no single minimum resolvable difference. In this case, the+-- minimum resolvable difference for a given polygon is dependent on the+-- maximum exponent, e, in the range of z values spanned by the primitive.+-- If n is the number of bits in the floating-point mantissa, the minimum+-- resolvable difference, r, for the given primitive is defined as+--+-- -   r = 2e-n+--+-- If a triangle is rasterized using the+-- 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV' polygon+-- mode, then this minimum resolvable difference /may/ not be resolvable+-- for samples outside of the triangle, where the depth is extrapolated.+--+-- If no depth buffer is present, r is undefined.+--+-- The bias value o for a polygon is+--+-- \[\begin{aligned}+-- o &= \mathrm{dbclamp}( m \times \mathtt{depthBiasSlopeFactor} + r \times \mathtt{depthBiasConstantFactor} ) \\+-- \text{where} &\quad \mathrm{dbclamp}(x) =+-- \begin{cases}+--     x                                 & \mathtt{depthBiasClamp} = 0 \ \text{or}\ \texttt{NaN} \\+--     \min(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} > 0 \\+--     \max(x, \mathtt{depthBiasClamp})  & \mathtt{depthBiasClamp} < 0 \\+-- \end{cases}+-- \end{aligned}\]+--+-- m is computed as described above. If the depth buffer uses a fixed-point+-- representation, m is a function of depth values in the range [0,1], and+-- o is applied to depth values in the same range.+--+-- For fixed-point depth buffers, fragment depth values are always limited+-- to the range [0,1] by clamping after depth bias addition is performed.+-- Unless the @VK_EXT_depth_range_unrestricted@ extension is enabled,+-- fragment depth values are clamped even when the depth buffer uses a+-- floating-point representation.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdSetDepthBias-depthBiasClamp-00790# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBiasClamp depth bias clamping>+--     feature is not enabled, @depthBiasClamp@ /must/ be @0.0@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetDepthBias-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetDepthBias-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetDepthBias-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdSetDepthBias :: forall io+                 . (MonadIO io)+                => -- | @commandBuffer@ is the command buffer into which the command will be+                   -- recorded.+                   CommandBuffer+                -> -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant+                   -- depth value added to each fragment.+                   ("depthBiasConstantFactor" ::: Float)+                -> -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.+                   ("depthBiasClamp" ::: Float)+                -> -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope+                   -- in depth bias calculations.+                   ("depthBiasSlopeFactor" ::: Float)+                -> io ()+cmdSetDepthBias commandBuffer depthBiasConstantFactor depthBiasClamp depthBiasSlopeFactor = liftIO $ do+  let vkCmdSetDepthBiasPtr = pVkCmdSetDepthBias (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdSetDepthBiasPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBias is null" Nothing Nothing+  let vkCmdSetDepthBias' = mkVkCmdSetDepthBias vkCmdSetDepthBiasPtr+  vkCmdSetDepthBias' (commandBufferHandle (commandBuffer)) (CFloat (depthBiasConstantFactor)) (CFloat (depthBiasClamp)) (CFloat (depthBiasSlopeFactor))+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetBlendConstants+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (FixedArray 4 CFloat) -> IO ()++-- | vkCmdSetBlendConstants - Set the values of blend constants+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetBlendConstants-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetBlendConstants-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetBlendConstants-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdSetBlendConstants :: forall io+                      . (MonadIO io)+                     => -- | @commandBuffer@ is the command buffer into which the command will be+                        -- recorded.+                        CommandBuffer+                     -> -- | @blendConstants@ is a pointer to an array of four values specifying the+                        -- R, G, B, and A components of the blend constant color used in blending,+                        -- depending on the+                        -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.+                        ("blendConstants" ::: (Float, Float, Float, Float))+                     -> io ()+cmdSetBlendConstants commandBuffer blendConstants = liftIO . evalContT $ do+  let vkCmdSetBlendConstantsPtr = pVkCmdSetBlendConstants (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdSetBlendConstantsPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetBlendConstants is null" Nothing Nothing+  let vkCmdSetBlendConstants' = mkVkCmdSetBlendConstants vkCmdSetBlendConstantsPtr+  pBlendConstants <- ContT $ allocaBytesAligned @(FixedArray 4 CFloat) 16 4+  let pBlendConstants' = lowerArrayPtr pBlendConstants+  lift $ case (blendConstants) of+    (e0, e1, e2, e3) -> do+      poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))+      poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))+      poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))+      poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+  lift $ vkCmdSetBlendConstants' (commandBufferHandle (commandBuffer)) (pBlendConstants)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetDepthBounds+  :: FunPtr (Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()) -> Ptr CommandBuffer_T -> CFloat -> CFloat -> IO ()++-- | vkCmdSetDepthBounds - Set the depth bounds test values for a command+-- buffer+--+-- = Description+--+-- This command sets the state for a given draw when the graphics pipeline+-- is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS' set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdSetDepthBounds-minDepthBounds-00600# Unless the+--     @VK_EXT_depth_range_unrestricted@ extension is enabled+--     @minDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive+--+-- -   #VUID-vkCmdSetDepthBounds-maxDepthBounds-00601# Unless the+--     @VK_EXT_depth_range_unrestricted@ extension is enabled+--     @maxDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetDepthBounds-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetDepthBounds-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetDepthBounds-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdSetDepthBounds :: forall io+                   . (MonadIO io)+                  => -- | @commandBuffer@ is the command buffer into which the command will be+                     -- recorded.+                     CommandBuffer+                  -> -- | @minDepthBounds@ is the minimum depth bound.+                     ("minDepthBounds" ::: Float)+                  -> -- | @maxDepthBounds@ is the maximum depth bound.+                     ("maxDepthBounds" ::: Float)+                  -> io ()+cmdSetDepthBounds commandBuffer minDepthBounds maxDepthBounds = liftIO $ do+  let vkCmdSetDepthBoundsPtr = pVkCmdSetDepthBounds (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdSetDepthBoundsPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetDepthBounds is null" Nothing Nothing+  let vkCmdSetDepthBounds' = mkVkCmdSetDepthBounds vkCmdSetDepthBoundsPtr+  vkCmdSetDepthBounds' (commandBufferHandle (commandBuffer)) (CFloat (minDepthBounds)) (CFloat (maxDepthBounds))+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetStencilCompareMask+  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()++-- | vkCmdSetStencilCompareMask - Set the stencil compare mask dynamic state+--+-- = Description+--+-- This command sets the state for a given draw when the graphics pipeline+-- is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_COMPARE_MASK'+-- set in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetStencilCompareMask-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetStencilCompareMask-faceMask-parameter# @faceMask@+--     /must/ be a valid combination of+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values+--+-- -   #VUID-vkCmdSetStencilCompareMask-faceMask-requiredbitmask#+--     @faceMask@ /must/ not be @0@+--+-- -   #VUID-vkCmdSetStencilCompareMask-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetStencilCompareMask-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'+cmdSetStencilCompareMask :: forall io+                          . (MonadIO io)+                         => -- | @commandBuffer@ is the command buffer into which the command will be+                            -- recorded.+                            CommandBuffer+                         -> -- | @faceMask@ is a bitmask of+                            -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying+                            -- the set of stencil state for which to update the compare mask.+                            ("faceMask" ::: StencilFaceFlags)+                         -> -- | @compareMask@ is the new value to use as the stencil compare mask.+                            ("compareMask" ::: Word32)+                         -> io ()+cmdSetStencilCompareMask commandBuffer faceMask compareMask = liftIO $ do+  let vkCmdSetStencilCompareMaskPtr = pVkCmdSetStencilCompareMask (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdSetStencilCompareMaskPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilCompareMask is null" Nothing Nothing+  let vkCmdSetStencilCompareMask' = mkVkCmdSetStencilCompareMask vkCmdSetStencilCompareMaskPtr+  vkCmdSetStencilCompareMask' (commandBufferHandle (commandBuffer)) (faceMask) (compareMask)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetStencilWriteMask+  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()++-- | vkCmdSetStencilWriteMask - Set the stencil write mask dynamic state+--+-- = Description+--+-- This command sets the state for a given draw when the graphics pipeline+-- is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_WRITE_MASK' set+-- in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetStencilWriteMask-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetStencilWriteMask-faceMask-parameter# @faceMask@ /must/+--     be a valid combination of+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values+--+-- -   #VUID-vkCmdSetStencilWriteMask-faceMask-requiredbitmask# @faceMask@+--     /must/ not be @0@+--+-- -   #VUID-vkCmdSetStencilWriteMask-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetStencilWriteMask-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'+cmdSetStencilWriteMask :: forall io+                        . (MonadIO io)+                       => -- | @commandBuffer@ is the command buffer into which the command will be+                          -- recorded.+                          CommandBuffer+                       -> -- | @faceMask@ is a bitmask of+                          -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying+                          -- the set of stencil state for which to update the write mask, as+                          -- described above for 'cmdSetStencilCompareMask'.+                          ("faceMask" ::: StencilFaceFlags)+                       -> -- | @writeMask@ is the new value to use as the stencil write mask.+                          ("writeMask" ::: Word32)+                       -> io ()+cmdSetStencilWriteMask commandBuffer faceMask writeMask = liftIO $ do+  let vkCmdSetStencilWriteMaskPtr = pVkCmdSetStencilWriteMask (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdSetStencilWriteMaskPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilWriteMask is null" Nothing Nothing+  let vkCmdSetStencilWriteMask' = mkVkCmdSetStencilWriteMask vkCmdSetStencilWriteMaskPtr+  vkCmdSetStencilWriteMask' (commandBufferHandle (commandBuffer)) (faceMask) (writeMask)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetStencilReference+  :: FunPtr (Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> StencilFaceFlags -> Word32 -> IO ()++-- | vkCmdSetStencilReference - Set the stencil reference dynamic state+--+-- = Description+--+-- This command sets the state for a given draw when the graphics pipeline+-- is created with+-- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_REFERENCE' set+-- in+-- 'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetStencilReference-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetStencilReference-faceMask-parameter# @faceMask@ /must/+--     be a valid combination of+--     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values+--+-- -   #VUID-vkCmdSetStencilReference-faceMask-requiredbitmask# @faceMask@+--     /must/ not be @0@+--+-- -   #VUID-vkCmdSetStencilReference-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetStencilReference-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlags'+cmdSetStencilReference :: forall io+                        . (MonadIO io)+                       => -- | @commandBuffer@ is the command buffer into which the command will be+                          -- recorded.+                          CommandBuffer+                       -> -- | @faceMask@ is a bitmask of+                          -- 'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' specifying+                          -- the set of stencil state for which to update the reference value, as+                          -- described above for 'cmdSetStencilCompareMask'.+                          ("faceMask" ::: StencilFaceFlags)+                       -> -- | @reference@ is the new value to use as the stencil reference value.+                          ("reference" ::: Word32)+                       -> io ()+cmdSetStencilReference commandBuffer faceMask reference = liftIO $ do+  let vkCmdSetStencilReferencePtr = pVkCmdSetStencilReference (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdSetStencilReferencePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetStencilReference is null" Nothing Nothing+  let vkCmdSetStencilReference' = mkVkCmdSetStencilReference vkCmdSetStencilReferencePtr+  vkCmdSetStencilReference' (commandBufferHandle (commandBuffer)) (faceMask) (reference)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBindDescriptorSets+  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> PipelineLayout -> Word32 -> Word32 -> Ptr DescriptorSet -> Word32 -> Ptr Word32 -> IO ()++-- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer+--+-- = Description+--+-- 'cmdBindDescriptorSets' causes the sets numbered [@firstSet@..+-- @firstSet@+@descriptorSetCount@-1] to use the bindings stored in+-- @pDescriptorSets@[0..descriptorSetCount-1] for subsequent+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline commands>+-- set by @pipelineBindPoint@. Any bindings that were previously applied+-- via these sets are no longer valid.+--+-- Once bound, a descriptor set affects rendering of subsequent commands+-- that interact with the given pipeline type in the command buffer until+-- either a different set is bound to the same set number, or the set is+-- disturbed as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>.+--+-- A compatible descriptor set /must/ be bound for all set numbers that any+-- shaders in a pipeline access, at the time that a draw or dispatch+-- command is recorded to execute using that pipeline. However, if none of+-- the shaders in a pipeline statically use any bindings with a particular+-- set number, then no descriptor set need be bound for that set number,+-- even if the pipeline layout includes a non-trivial descriptor set layout+-- for that set number.+--+-- If any of the sets being bound include dynamic uniform or storage+-- buffers, then @pDynamicOffsets@ includes one element for each array+-- element in each dynamic descriptor type binding in each set. Values are+-- taken from @pDynamicOffsets@ in an order such that all entries for set N+-- come before set N+1; within a set, entries are ordered by the binding+-- numbers in the descriptor set layouts; and within a binding array,+-- elements are in order. @dynamicOffsetCount@ /must/ equal the total+-- number of dynamic descriptors in the sets being bound.+--+-- The effective offset used for dynamic uniform and storage buffer+-- bindings is the sum of the relative offset taken from @pDynamicOffsets@,+-- and the base address of the buffer plus base offset in the descriptor+-- set. The range of the dynamic uniform and storage buffer bindings is the+-- buffer range as specified in the descriptor set.+--+-- Each of the @pDescriptorSets@ /must/ be compatible with the pipeline+-- layout specified by @layout@. The layout used to program the bindings+-- /must/ also be compatible with the pipeline used in subsequent+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipeline-bindpoint-commands bound pipeline commands>+-- with that pipeline type, as defined in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility Pipeline Layout Compatibility>+-- section.+--+-- The descriptor set contents bound by a call to 'cmdBindDescriptorSets'+-- /may/ be consumed at the following times:+--+-- -   For descriptor bindings created with the+--     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'+--     bit set, the contents /may/ be consumed when the command buffer is+--     submitted to a queue, or during shader execution of the resulting+--     draws and dispatches, or any time in between. Otherwise,+--+-- -   during host execution of the command, or during shader execution of+--     the resulting draws and dispatches, or any time in between.+--+-- Thus, the contents of a descriptor set binding /must/ not be altered+-- (overwritten by an update command, or freed) between the first point in+-- time that it /may/ be consumed, and when the command completes executing+-- on the queue.+--+-- The contents of @pDynamicOffsets@ are consumed immediately during+-- execution of 'cmdBindDescriptorSets'. Once all pending uses have+-- completed, it is legal to update and reuse a descriptor set.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358# Each element of+--     @pDescriptorSets@ /must/ have been allocated with a+--     'Vulkan.Core10.Handles.DescriptorSetLayout' that matches (is the+--     same as, or identically defined as) the+--     'Vulkan.Core10.Handles.DescriptorSetLayout' at set /n/ in @layout@,+--     where /n/ is the sum of @firstSet@ and the index into+--     @pDescriptorSets@+--+-- -   #VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359#+--     @dynamicOffsetCount@ /must/ be equal to the total number of dynamic+--     descriptors in @pDescriptorSets@+--+-- -   #VUID-vkCmdBindDescriptorSets-firstSet-00360# The sum of @firstSet@+--     and @descriptorSetCount@ /must/ be less than or equal to+--     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@+--     provided when @layout@ was created+--+-- -   #VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361#+--     @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s+--     parent 'Vulkan.Core10.Handles.CommandPool'’s queue family+--+-- -   #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01971# Each element of+--     @pDynamicOffsets@ which corresponds to a descriptor binding with+--     type+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'+--     /must/ be a multiple of+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@+--+-- -   #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-01972# Each element of+--     @pDynamicOffsets@ which corresponds to a descriptor binding with+--     type+--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'+--     /must/ be a multiple of+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@+--+-- -   #VUID-vkCmdBindDescriptorSets-pDescriptorSets-01979# For each+--     dynamic uniform or storage buffer binding in @pDescriptorSets@, the+--     sum of the effective offset, as defined above, and the range of the+--     binding /must/ be less than or equal to the size of the buffer+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBindDescriptorSets-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBindDescriptorSets-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid+--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value+--+-- -   #VUID-vkCmdBindDescriptorSets-layout-parameter# @layout@ /must/ be a+--     valid 'Vulkan.Core10.Handles.PipelineLayout' handle+--+-- -   #VUID-vkCmdBindDescriptorSets-pDescriptorSets-parameter#+--     @pDescriptorSets@ /must/ be a valid pointer to an array of+--     @descriptorSetCount@ valid 'Vulkan.Core10.Handles.DescriptorSet'+--     handles+--+-- -   #VUID-vkCmdBindDescriptorSets-pDynamicOffsets-parameter# If+--     @dynamicOffsetCount@ is not @0@, @pDynamicOffsets@ /must/ be a valid+--     pointer to an array of @dynamicOffsetCount@ @uint32_t@ values+--+-- -   #VUID-vkCmdBindDescriptorSets-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBindDescriptorSets-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdBindDescriptorSets-descriptorSetCount-arraylength#+--     @descriptorSetCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCmdBindDescriptorSets-commonparent# Each of @commandBuffer@,+--     @layout@, and the elements of @pDescriptorSets@ /must/ have been+--     created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.DescriptorSet',+-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',+-- 'Vulkan.Core10.Handles.PipelineLayout'+cmdBindDescriptorSets :: forall io+                       . (MonadIO io)+                      => -- | @commandBuffer@ is the command buffer that the descriptor sets will be+                         -- bound to.+                         CommandBuffer+                      -> -- | @pipelineBindPoint@ is a+                         -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' indicating the+                         -- type of the pipeline that will use the descriptors. There is a separate+                         -- set of bind points for each pipeline type, so binding one does not+                         -- disturb the others.+                         PipelineBindPoint+                      -> -- | @layout@ is a 'Vulkan.Core10.Handles.PipelineLayout' object used to+                         -- program the bindings.+                         PipelineLayout+                      -> -- | @firstSet@ is the set number of the first descriptor set to be bound.+                         ("firstSet" ::: Word32)+                      -> -- | @pDescriptorSets@ is a pointer to an array of handles to+                         -- 'Vulkan.Core10.Handles.DescriptorSet' objects describing the descriptor+                         -- sets to write to.+                         ("descriptorSets" ::: Vector DescriptorSet)+                      -> -- | @pDynamicOffsets@ is a pointer to an array of @uint32_t@ values+                         -- specifying dynamic offsets.+                         ("dynamicOffsets" ::: Vector Word32)+                      -> io ()+cmdBindDescriptorSets commandBuffer pipelineBindPoint layout firstSet descriptorSets dynamicOffsets = liftIO . evalContT $ do+  let vkCmdBindDescriptorSetsPtr = pVkCmdBindDescriptorSets (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdBindDescriptorSetsPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindDescriptorSets is null" Nothing Nothing+  let vkCmdBindDescriptorSets' = mkVkCmdBindDescriptorSets vkCmdBindDescriptorSetsPtr+  pPDescriptorSets <- ContT $ allocaBytesAligned @DescriptorSet ((Data.Vector.length (descriptorSets)) * 8) 8+  lift $ Data.Vector.imapM_ (\i e -> poke (pPDescriptorSets `plusPtr` (8 * (i)) :: Ptr DescriptorSet) (e)) (descriptorSets)+  pPDynamicOffsets <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (dynamicOffsets)) * 4) 4+  lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicOffsets `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (dynamicOffsets)+  lift $ vkCmdBindDescriptorSets' (commandBufferHandle (commandBuffer)) (pipelineBindPoint) (layout) (firstSet) ((fromIntegral (Data.Vector.length $ (descriptorSets)) :: Word32)) (pPDescriptorSets) ((fromIntegral (Data.Vector.length $ (dynamicOffsets)) :: Word32)) (pPDynamicOffsets)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBindIndexBuffer+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IndexType -> IO ()++-- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBindIndexBuffer-offset-00431# @offset@ /must/ be less+--     than the size of @buffer@+--+-- -   #VUID-vkCmdBindIndexBuffer-offset-00432# The sum of @offset@ and the+--     address of the range of 'Vulkan.Core10.Handles.DeviceMemory' object+--     that is backing @buffer@, /must/ be a multiple of the type indicated+--     by @indexType@+--+-- -   #VUID-vkCmdBindIndexBuffer-buffer-00433# @buffer@ /must/ have been+--     created with the+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'+--     flag+--+-- -   #VUID-vkCmdBindIndexBuffer-buffer-00434# If @buffer@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdBindIndexBuffer-indexType-02507# @indexType@ /must/ not+--     be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'+--+-- -   #VUID-vkCmdBindIndexBuffer-indexType-02765# If @indexType@ is+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-indexTypeUint8 indexTypeUint8>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBindIndexBuffer-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBindIndexBuffer-buffer-parameter# @buffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdBindIndexBuffer-indexType-parameter# @indexType@ /must/+--     be a valid 'Vulkan.Core10.Enums.IndexType.IndexType' value+--+-- -   #VUID-vkCmdBindIndexBuffer-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBindIndexBuffer-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBindIndexBuffer-commonparent# Both of @buffer@, and+--     @commandBuffer@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Enums.IndexType.IndexType'+cmdBindIndexBuffer :: forall io+                    . (MonadIO io)+                   => -- | @commandBuffer@ is the command buffer into which the command is+                      -- recorded.+                      CommandBuffer+                   -> -- | @buffer@ is the buffer being bound.+                      Buffer+                   -> -- | @offset@ is the starting offset in bytes within @buffer@ used in index+                      -- buffer address calculations.+                      ("offset" ::: DeviceSize)+                   -> -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' value+                      -- specifying whether indices are treated as 16 bits or 32 bits.+                      IndexType+                   -> io ()+cmdBindIndexBuffer commandBuffer buffer offset indexType = liftIO $ do+  let vkCmdBindIndexBufferPtr = pVkCmdBindIndexBuffer (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdBindIndexBufferPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindIndexBuffer is null" Nothing Nothing+  let vkCmdBindIndexBuffer' = mkVkCmdBindIndexBuffer vkCmdBindIndexBufferPtr+  vkCmdBindIndexBuffer' (commandBufferHandle (commandBuffer)) (buffer) (offset) (indexType)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBindVertexBuffers+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Ptr Buffer -> Ptr DeviceSize -> IO ()++-- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer+--+-- = Description+--+-- The values taken from elements i of @pBuffers@ and @pOffsets@ replace+-- the current state for the vertex input binding @firstBinding@ + i, for i+-- in [0, @bindingCount@). The vertex input binding is updated to start at+-- the offset indicated by @pOffsets@[i] from the start of the buffer+-- @pBuffers@[i]. All vertex input attributes that use each of these+-- bindings will use these updated addresses in their address calculations+-- for subsequent draw commands. If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+-- feature is enabled, elements of @pBuffers@ /can/ be+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and /can/ be used by the+-- vertex shader. If a vertex input attribute is bound to a vertex input+-- binding that is 'Vulkan.Core10.APIConstants.NULL_HANDLE', the values+-- taken from memory are considered to be zero, and missing G, B, or A+-- components are+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBindVertexBuffers-firstBinding-00624# @firstBinding@+--     /must/ be less than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@+--+-- -   #VUID-vkCmdBindVertexBuffers-firstBinding-00625# The sum of+--     @firstBinding@ and @bindingCount@ /must/ be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@+--+-- -   #VUID-vkCmdBindVertexBuffers-pOffsets-00626# All elements of+--     @pOffsets@ /must/ be less than the size of the corresponding element+--     in @pBuffers@+--+-- -   #VUID-vkCmdBindVertexBuffers-pBuffers-00627# All elements of+--     @pBuffers@ /must/ have been created with the+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'+--     flag+--+-- -   #VUID-vkCmdBindVertexBuffers-pBuffers-00628# Each element of+--     @pBuffers@ that is non-sparse /must/ be bound completely and+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdBindVertexBuffers-pBuffers-04001# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+--     feature is not enabled, all elements of @pBuffers@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdBindVertexBuffers-pBuffers-04002# If an element of+--     @pBuffers@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', then the+--     corresponding element of @pOffsets@ /must/ be zero+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBindVertexBuffers-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBindVertexBuffers-pBuffers-parameter# @pBuffers@ /must/+--     be a valid pointer to an array of @bindingCount@ valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--     'Vulkan.Core10.Handles.Buffer' handles+--+-- -   #VUID-vkCmdBindVertexBuffers-pOffsets-parameter# @pOffsets@ /must/+--     be a valid pointer to an array of @bindingCount@+--     'Vulkan.Core10.FundamentalTypes.DeviceSize' values+--+-- -   #VUID-vkCmdBindVertexBuffers-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBindVertexBuffers-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBindVertexBuffers-bindingCount-arraylength#+--     @bindingCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCmdBindVertexBuffers-commonparent# Both of @commandBuffer@,+--     and the elements of @pBuffers@ that are valid handles of non-ignored+--     parameters /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdBindVertexBuffers :: forall io+                      . (MonadIO io)+                     => -- | @commandBuffer@ is the command buffer into which the command is+                        -- recorded.+                        CommandBuffer+                     -> -- | @firstBinding@ is the index of the first vertex input binding whose+                        -- state is updated by the command.+                        ("firstBinding" ::: Word32)+                     -> -- | @pBuffers@ is a pointer to an array of buffer handles.+                        ("buffers" ::: Vector Buffer)+                     -> -- | @pOffsets@ is a pointer to an array of buffer offsets.+                        ("offsets" ::: Vector DeviceSize)+                     -> io ()+cmdBindVertexBuffers commandBuffer firstBinding buffers offsets = liftIO . evalContT $ do+  let vkCmdBindVertexBuffersPtr = pVkCmdBindVertexBuffers (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdBindVertexBuffersPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBindVertexBuffers is null" Nothing Nothing+  let vkCmdBindVertexBuffers' = mkVkCmdBindVertexBuffers vkCmdBindVertexBuffersPtr+  let pBuffersLength = Data.Vector.length $ (buffers)+  lift $ unless ((Data.Vector.length $ (offsets)) == pBuffersLength) $+    throwIO $ IOError Nothing InvalidArgument "" "pOffsets and pBuffers must have the same length" Nothing Nothing+  pPBuffers <- ContT $ allocaBytesAligned @Buffer ((Data.Vector.length (buffers)) * 8) 8+  lift $ Data.Vector.imapM_ (\i e -> poke (pPBuffers `plusPtr` (8 * (i)) :: Ptr Buffer) (e)) (buffers)+  pPOffsets <- ContT $ allocaBytesAligned @DeviceSize ((Data.Vector.length (offsets)) * 8) 8+  lift $ Data.Vector.imapM_ (\i e -> poke (pPOffsets `plusPtr` (8 * (i)) :: Ptr DeviceSize) (e)) (offsets)+  lift $ vkCmdBindVertexBuffers' (commandBufferHandle (commandBuffer)) (firstBinding) ((fromIntegral pBuffersLength :: Word32)) (pPBuffers) (pPOffsets)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdDraw+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()++-- | vkCmdDraw - Draw primitives+--+-- = Description+--+-- When the command is executed, primitives are assembled using the current+-- primitive topology and @vertexCount@ consecutive vertex indices with the+-- first @vertexIndex@ value equal to @firstVertex@. The primitives are+-- drawn @instanceCount@ times with @instanceIndex@ starting with+-- @firstInstance@ and increasing sequentially for each instance. The+-- assembled primitives execute the bound graphics pipeline.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdDraw-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+--     this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdDraw-None-02691# If a 'Vulkan.Core10.Handles.ImageView'+--     is accessed using atomic operations as a result of this command,+--     then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- -   #VUID-vkCmdDraw-None-02692# If a 'Vulkan.Core10.Handles.ImageView'+--     is sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdDraw-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering, as specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDraw-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+--     reduction mode of either+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+--     or+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+--     as a result of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering together with minmax filtering, as+--     specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDraw-flags-02696# Any 'Vulkan.Core10.Handles.Image'+--     created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@+--     containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+--     sampled as a result of this command /must/ only be sampled using a+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- -   #VUID-vkCmdDraw-None-02697# For each set /n/ that is statically used+--     by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind+--     point used by this command, a descriptor set /must/ have been bound+--     to /n/ at the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDraw-None-02698# For each push constant that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDraw-None-02699# Descriptors in each bound descriptor+--     set, specified via 'cmdBindDescriptorSets', /must/ be valid if they+--     are statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to+--     the pipeline bind point used by this command+--+-- -   #VUID-vkCmdDraw-None-02700# A valid pipeline /must/ be bound to the+--     pipeline bind point used by this command+--+-- -   #VUID-vkCmdDraw-commandBuffer-02701# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic+--+-- -   #VUID-vkCmdDraw-None-02859# There /must/ not have been any calls to+--     dynamic state setting commands for any state not specified as+--     dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to the+--     pipeline bind point used by this command, since that pipeline was+--     bound+--+-- -   #VUID-vkCmdDraw-None-02702# If the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a 'Vulkan.Core10.Handles.Sampler' object that uses+--     unnormalized coordinates, that sampler /must/ not be used to sample+--     from any 'Vulkan.Core10.Handles.Image' with a+--     'Vulkan.Core10.Handles.ImageView' of the type+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+--     any shader stage+--+-- -   #VUID-vkCmdDraw-None-02703# If the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a 'Vulkan.Core10.Handles.Sampler' object that uses+--     unnormalized coordinates, that sampler /must/ not be used with any+--     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@+--     instructions with @ImplicitLod@, @Dref@ or @Proj@ in their name, in+--     any shader stage+--+-- -   #VUID-vkCmdDraw-None-02704# If the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a 'Vulkan.Core10.Handles.Sampler' object that uses+--     unnormalized coordinates, that sampler /must/ not be used with any+--     of the SPIR-V @OpImageSample*@ or @OpImageSparseSample*@+--     instructions that includes a LOD bias or any offset values, in any+--     shader stage+--+-- -   #VUID-vkCmdDraw-None-02705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a uniform buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDraw-None-02706# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a storage buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDraw-commandBuffer-02707# If @commandBuffer@ is an+--     unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource+--+-- -   #VUID-vkCmdDraw-None-04115# If a 'Vulkan.Core10.Handles.ImageView'+--     is accessed using @OpImageWrite@ as a result of this command, then+--     the @Type@ of the @Texel@ operand of that instruction /must/ have at+--     least as many components as the image view’s format.+--+-- -   #VUID-vkCmdDraw-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDraw-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDraw-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDraw-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDraw-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDraw-sparseImageInt64Atomics-04474# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+--     created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDraw-sparseImageInt64Atomics-04475# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+--     created with the+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDraw-renderPass-02684# The current render pass /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+--     with the @renderPass@ member of the+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+--     to+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- -   #VUID-vkCmdDraw-subpass-02685# The subpass index of the current+--     render pass /must/ be equal to the @subpass@ member of the+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+--     to+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- -   #VUID-vkCmdDraw-None-02686# Every input attachment used by the+--     current subpass /must/ be bound to the pipeline via a descriptor set+--+-- -   #VUID-vkCmdDraw-None-04584# Image subresources used as attachments+--     in the current render pass /must/ not be accessed in any way other+--     than as an attachment by this command, except for cases involving+--     read-only access to depth\/stencil attachments as described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter+--+-- -   #VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688# If the draw is+--     recorded in a render pass instance with multiview enabled, the+--     maximum instance index /must/ be less than or equal to+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@+--+-- -   #VUID-vkCmdDraw-sampleLocationsEnable-02689# If the bound graphics+--     pipeline was created with+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@+--     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass+--     has a depth\/stencil attachment, then that attachment /must/ have+--     been created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'+--     bit set+--+-- -   #VUID-vkCmdDraw-viewportCount-03417# If the bound graphics pipeline+--     state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     dynamic state enabled, then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ match the+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@+--     of the pipeline+--+-- -   #VUID-vkCmdDraw-scissorCount-03418# If the bound graphics pipeline+--     state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @scissorCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ match the+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@+--     of the pipeline+--+-- -   #VUID-vkCmdDraw-viewportCount-03419# If the bound graphics pipeline+--     state was created with both the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic states enabled then both+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     and+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ match the @scissorCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--+-- -   #VUID-vkCmdDraw-viewportCount-04137# If the bound graphics pipeline+--     state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+--     dynamic state enabled, then the bound graphics pipeline /must/ have+--     been created with+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDraw-viewportCount-04138# If the bound graphics pipeline+--     state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+--     dynamic states enabled then the @viewportCount@ parameter in the+--     last call to+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'+--     /must/ be greater than or equal to the @viewportCount@ parameter in+--     the last call to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDraw-viewportCount-04139# If the bound graphics pipeline+--     state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+--     dynamic state enabled, then the bound graphics pipeline /must/ have+--     been created with+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDraw-viewportCount-04140# If the bound graphics pipeline+--     state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+--     dynamic states enabled then the @viewportCount@ parameter in the+--     last call to+--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'+--     /must/ be greater than or equal to the @viewportCount@ parameter in+--     the last call to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDraw-VkPipelineVieportCreateInfo-04141# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled and an instance of+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics+--     pipeline /must/ have been created with+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDraw-VkPipelineVieportCreateInfo-04142# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled and an instance of+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics+--     pipeline /must/ have been created with+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDraw-primitiveTopology-03420# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'+--     dynamic state enabled then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @primitiveTopology@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+--     /must/ be of the same+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>+--     as the pipeline+--     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@+--     state+--+-- -   #VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+--     limit is not supported, the bound graphics pipeline was created with+--     the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, and any of the shader stages of the bound+--     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,+--     then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ be @1@+--+-- -   #VUID-vkCmdDraw-commandBuffer-02712# If @commandBuffer@ is a+--     protected command buffer, any resource written to by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be an unprotected resource+--+-- -   #VUID-vkCmdDraw-commandBuffer-02713# If @commandBuffer@ is a+--     protected command buffer, pipeline stages other than the+--     framebuffer-space and compute stages in the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point /must/ not write to any resource+--+-- -   #VUID-vkCmdDraw-None-04007# All vertex input bindings accessed via+--     vertex input variables declared in the vertex shader entry point’s+--     interface /must/ have either valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound+--+-- -   #VUID-vkCmdDraw-None-04008# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+--     feature is not enabled, all vertex input bindings accessed via+--     vertex input variables declared in the vertex shader entry point’s+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdDraw-None-02721# For a given vertex buffer binding, any+--     attribute data fetched /must/ be entirely contained within the+--     corresponding vertex buffer binding, as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdDraw-commandBuffer-parameter# @commandBuffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdDraw-commandBuffer-recording# @commandBuffer@ /must/ be+--     in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdDraw-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdDraw-renderpass# This command /must/ only be called+--     inside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdDraw :: forall io+         . (MonadIO io)+        => -- | @commandBuffer@ is the command buffer into which the command is+           -- recorded.+           CommandBuffer+        -> -- | @vertexCount@ is the number of vertices to draw.+           ("vertexCount" ::: Word32)+        -> -- | @instanceCount@ is the number of instances to draw.+           ("instanceCount" ::: Word32)+        -> -- | @firstVertex@ is the index of the first vertex to draw.+           ("firstVertex" ::: Word32)+        -> -- | @firstInstance@ is the instance ID of the first instance to draw.+           ("firstInstance" ::: Word32)+        -> io ()+cmdDraw commandBuffer vertexCount instanceCount firstVertex firstInstance = liftIO $ do+  let vkCmdDrawPtr = pVkCmdDraw (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdDrawPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDraw is null" Nothing Nothing+  let vkCmdDraw' = mkVkCmdDraw vkCmdDrawPtr+  vkCmdDraw' (commandBufferHandle (commandBuffer)) (vertexCount) (instanceCount) (firstVertex) (firstInstance)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdDrawIndexed+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()++-- | vkCmdDrawIndexed - Issue an indexed draw into a command buffer+--+-- = Description+--+-- When the command is executed, primitives are assembled using the current+-- primitive topology and @indexCount@ vertices whose indices are retrieved+-- from the index buffer. The index buffer is treated as an array of+-- tightly packed unsigned integers of size defined by the+-- 'cmdBindIndexBuffer'::@indexType@ parameter with which the buffer was+-- bound.+--+-- The first vertex index is at an offset of @firstIndex@ × @indexSize@ ++-- @offset@ within the bound index buffer, where @offset@ is the offset+-- specified by 'cmdBindIndexBuffer' and @indexSize@ is the byte size of+-- the type specified by @indexType@. Subsequent index values are retrieved+-- from consecutive locations in the index buffer. Indices are first+-- compared to the primitive restart value, then zero extended to 32 bits+-- (if the @indexType@ is+-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' or+-- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16') and have+-- @vertexOffset@ added to them, before being supplied as the @vertexIndex@+-- value.+--+-- The primitives are drawn @instanceCount@ times with @instanceIndex@+-- starting with @firstInstance@ and increasing sequentially for each+-- instance. The assembled primitives execute the bound graphics pipeline.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdDrawIndexed-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+--     this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdDrawIndexed-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic+--     operations as a result of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- -   #VUID-vkCmdDrawIndexed-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdDrawIndexed-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering, as specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDrawIndexed-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+--     reduction mode of either+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+--     or+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+--     as a result of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering together with minmax filtering, as+--     specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDrawIndexed-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+--     sampled as a result of this command /must/ only be sampled using a+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- -   #VUID-vkCmdDrawIndexed-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDrawIndexed-None-02698# For each push constant that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDrawIndexed-None-02699# Descriptors in each bound+--     descriptor set, specified via 'cmdBindDescriptorSets', /must/ be+--     valid if they are statically used by the+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+--     used by this command+--+-- -   #VUID-vkCmdDrawIndexed-None-02700# A valid pipeline /must/ be bound+--     to the pipeline bind point used by this command+--+-- -   #VUID-vkCmdDrawIndexed-commandBuffer-02701# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic+--+-- -   #VUID-vkCmdDrawIndexed-None-02859# There /must/ not have been any+--     calls to dynamic state setting commands for any state not specified+--     as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to+--     the pipeline bind point used by this command, since that pipeline+--     was bound+--+-- -   #VUID-vkCmdDrawIndexed-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used to sample from any+--     'Vulkan.Core10.Handles.Image' with a+--     'Vulkan.Core10.Handles.ImageView' of the type+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+--     any shader stage+--+-- -   #VUID-vkCmdDrawIndexed-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- -   #VUID-vkCmdDrawIndexed-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that+--     includes a LOD bias or any offset values, in any shader stage+--+-- -   #VUID-vkCmdDrawIndexed-None-02705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a uniform buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDrawIndexed-None-02706# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a storage buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDrawIndexed-commandBuffer-02707# If @commandBuffer@ is an+--     unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource+--+-- -   #VUID-vkCmdDrawIndexed-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDrawIndexed-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDrawIndexed-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDrawIndexed-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDrawIndexed-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDrawIndexed-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDrawIndexed-sparseImageInt64Atomics-04474# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+--     created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDrawIndexed-sparseImageInt64Atomics-04475# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+--     created with the+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDrawIndexed-renderPass-02684# The current render pass+--     /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+--     with the @renderPass@ member of the+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+--     to+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- -   #VUID-vkCmdDrawIndexed-subpass-02685# The subpass index of the+--     current render pass /must/ be equal to the @subpass@ member of the+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+--     to+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- -   #VUID-vkCmdDrawIndexed-None-02686# Every input attachment used by+--     the current subpass /must/ be bound to the pipeline via a descriptor+--     set+--+-- -   #VUID-vkCmdDrawIndexed-None-04584# Image subresources used as+--     attachments in the current render pass /must/ not be accessed in any+--     way other than as an attachment by this command, except for cases+--     involving read-only access to depth\/stencil attachments as+--     described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter+--+-- -   #VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688# If the draw+--     is recorded in a render pass instance with multiview enabled, the+--     maximum instance index /must/ be less than or equal to+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@+--+-- -   #VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689# If the bound+--     graphics pipeline was created with+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@+--     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass+--     has a depth\/stencil attachment, then that attachment /must/ have+--     been created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'+--     bit set+--+-- -   #VUID-vkCmdDrawIndexed-viewportCount-03417# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     dynamic state enabled, then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ match the+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@+--     of the pipeline+--+-- -   #VUID-vkCmdDrawIndexed-scissorCount-03418# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @scissorCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ match the+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@+--     of the pipeline+--+-- -   #VUID-vkCmdDrawIndexed-viewportCount-03419# If the bound graphics+--     pipeline state was created with both the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic states enabled then both+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     and+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ match the @scissorCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexed-viewportCount-04137# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+--     dynamic state enabled, then the bound graphics pipeline /must/ have+--     been created with+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexed-viewportCount-04138# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+--     dynamic states enabled then the @viewportCount@ parameter in the+--     last call to+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'+--     /must/ be greater than or equal to the @viewportCount@ parameter in+--     the last call to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexed-viewportCount-04139# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+--     dynamic state enabled, then the bound graphics pipeline /must/ have+--     been created with+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexed-viewportCount-04140# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+--     dynamic states enabled then the @viewportCount@ parameter in the+--     last call to+--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'+--     /must/ be greater than or equal to the @viewportCount@ parameter in+--     the last call to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexed-VkPipelineVieportCreateInfo-04141# If the+--     bound graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled and an instance of+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics+--     pipeline /must/ have been created with+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexed-VkPipelineVieportCreateInfo-04142# If the+--     bound graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled and an instance of+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics+--     pipeline /must/ have been created with+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexed-primitiveTopology-03420# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'+--     dynamic state enabled then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @primitiveTopology@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+--     /must/ be of the same+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>+--     as the pipeline+--     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@+--     state+--+-- -   #VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+--     limit is not supported, the bound graphics pipeline was created with+--     the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, and any of the shader stages of the bound+--     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,+--     then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ be @1@+--+-- -   #VUID-vkCmdDrawIndexed-commandBuffer-02712# If @commandBuffer@ is a+--     protected command buffer, any resource written to by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be an unprotected resource+--+-- -   #VUID-vkCmdDrawIndexed-commandBuffer-02713# If @commandBuffer@ is a+--     protected command buffer, pipeline stages other than the+--     framebuffer-space and compute stages in the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point /must/ not write to any resource+--+-- -   #VUID-vkCmdDrawIndexed-None-04007# All vertex input bindings+--     accessed via vertex input variables declared in the vertex shader+--     entry point’s interface /must/ have either valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound+--+-- -   #VUID-vkCmdDrawIndexed-None-04008# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+--     feature is not enabled, all vertex input bindings accessed via+--     vertex input variables declared in the vertex shader entry point’s+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdDrawIndexed-None-02721# For a given vertex buffer+--     binding, any attribute data fetched /must/ be entirely contained+--     within the corresponding vertex buffer binding, as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>+--+-- -   #VUID-vkCmdDrawIndexed-indexSize-00463# (@indexSize@ × (@firstIndex@+--     + @indexCount@) + @offset@) /must/ be less than or equal to the size+--     of the bound index buffer, with @indexSize@ being based on the type+--     specified by @indexType@, where the index buffer, @indexType@, and+--     @offset@ are specified via 'cmdBindIndexBuffer'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdDrawIndexed-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdDrawIndexed-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdDrawIndexed-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdDrawIndexed-renderpass# This command /must/ only be+--     called inside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdDrawIndexed :: forall io+                . (MonadIO io)+               => -- | @commandBuffer@ is the command buffer into which the command is+                  -- recorded.+                  CommandBuffer+               -> -- | @indexCount@ is the number of vertices to draw.+                  ("indexCount" ::: Word32)+               -> -- | @instanceCount@ is the number of instances to draw.+                  ("instanceCount" ::: Word32)+               -> -- | @firstIndex@ is the base index within the index buffer.+                  ("firstIndex" ::: Word32)+               -> -- | @vertexOffset@ is the value added to the vertex index before indexing+                  -- into the vertex buffer.+                  ("vertexOffset" ::: Int32)+               -> -- | @firstInstance@ is the instance ID of the first instance to draw.+                  ("firstInstance" ::: Word32)+               -> io ()+cmdDrawIndexed commandBuffer indexCount instanceCount firstIndex vertexOffset firstInstance = liftIO $ do+  let vkCmdDrawIndexedPtr = pVkCmdDrawIndexed (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdDrawIndexedPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexed is null" Nothing Nothing+  let vkCmdDrawIndexed' = mkVkCmdDrawIndexed vkCmdDrawIndexedPtr+  vkCmdDrawIndexed' (commandBufferHandle (commandBuffer)) (indexCount) (instanceCount) (firstIndex) (vertexOffset) (firstInstance)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdDrawIndirect+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()++-- | vkCmdDrawIndirect - Issue an indirect draw into a command buffer+--+-- = Description+--+-- 'cmdDrawIndirect' behaves similarly to 'cmdDraw' except that the+-- parameters are read by the device from a buffer during execution.+-- @drawCount@ draws are executed by the command, with parameters taken+-- from @buffer@ starting at @offset@ and increasing by @stride@ bytes for+-- each successive draw. The parameters of each draw are encoded in an+-- array of 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures. If+-- @drawCount@ is less than or equal to one, @stride@ is ignored.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdDrawIndirect-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+--     this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdDrawIndirect-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic+--     operations as a result of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- -   #VUID-vkCmdDrawIndirect-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdDrawIndirect-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering, as specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDrawIndirect-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+--     reduction mode of either+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+--     or+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+--     as a result of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering together with minmax filtering, as+--     specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDrawIndirect-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+--     sampled as a result of this command /must/ only be sampled using a+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- -   #VUID-vkCmdDrawIndirect-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDrawIndirect-None-02698# For each push constant that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDrawIndirect-None-02699# Descriptors in each bound+--     descriptor set, specified via 'cmdBindDescriptorSets', /must/ be+--     valid if they are statically used by the+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+--     used by this command+--+-- -   #VUID-vkCmdDrawIndirect-None-02700# A valid pipeline /must/ be bound+--     to the pipeline bind point used by this command+--+-- -   #VUID-vkCmdDrawIndirect-commandBuffer-02701# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic+--+-- -   #VUID-vkCmdDrawIndirect-None-02859# There /must/ not have been any+--     calls to dynamic state setting commands for any state not specified+--     as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to+--     the pipeline bind point used by this command, since that pipeline+--     was bound+--+-- -   #VUID-vkCmdDrawIndirect-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used to sample from any+--     'Vulkan.Core10.Handles.Image' with a+--     'Vulkan.Core10.Handles.ImageView' of the type+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+--     any shader stage+--+-- -   #VUID-vkCmdDrawIndirect-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- -   #VUID-vkCmdDrawIndirect-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that+--     includes a LOD bias or any offset values, in any shader stage+--+-- -   #VUID-vkCmdDrawIndirect-None-02705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a uniform buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDrawIndirect-None-02706# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a storage buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDrawIndirect-commandBuffer-02707# If @commandBuffer@ is+--     an unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource+--+-- -   #VUID-vkCmdDrawIndirect-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDrawIndirect-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDrawIndirect-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDrawIndirect-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDrawIndirect-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDrawIndirect-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDrawIndirect-sparseImageInt64Atomics-04474# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+--     created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDrawIndirect-sparseImageInt64Atomics-04475# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+--     created with the+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDrawIndirect-renderPass-02684# The current render pass+--     /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+--     with the @renderPass@ member of the+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+--     to+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- -   #VUID-vkCmdDrawIndirect-subpass-02685# The subpass index of the+--     current render pass /must/ be equal to the @subpass@ member of the+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+--     to+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- -   #VUID-vkCmdDrawIndirect-None-02686# Every input attachment used by+--     the current subpass /must/ be bound to the pipeline via a descriptor+--     set+--+-- -   #VUID-vkCmdDrawIndirect-None-04584# Image subresources used as+--     attachments in the current render pass /must/ not be accessed in any+--     way other than as an attachment by this command, except for cases+--     involving read-only access to depth\/stencil attachments as+--     described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter+--+-- -   #VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688# If the draw+--     is recorded in a render pass instance with multiview enabled, the+--     maximum instance index /must/ be less than or equal to+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@+--+-- -   #VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689# If the bound+--     graphics pipeline was created with+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@+--     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass+--     has a depth\/stencil attachment, then that attachment /must/ have+--     been created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'+--     bit set+--+-- -   #VUID-vkCmdDrawIndirect-viewportCount-03417# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     dynamic state enabled, then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ match the+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@+--     of the pipeline+--+-- -   #VUID-vkCmdDrawIndirect-scissorCount-03418# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @scissorCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ match the+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@+--     of the pipeline+--+-- -   #VUID-vkCmdDrawIndirect-viewportCount-03419# If the bound graphics+--     pipeline state was created with both the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic states enabled then both+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     and+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ match the @scissorCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndirect-viewportCount-04137# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+--     dynamic state enabled, then the bound graphics pipeline /must/ have+--     been created with+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndirect-viewportCount-04138# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+--     dynamic states enabled then the @viewportCount@ parameter in the+--     last call to+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'+--     /must/ be greater than or equal to the @viewportCount@ parameter in+--     the last call to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndirect-viewportCount-04139# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+--     dynamic state enabled, then the bound graphics pipeline /must/ have+--     been created with+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndirect-viewportCount-04140# If the bound graphics+--     pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+--     dynamic states enabled then the @viewportCount@ parameter in the+--     last call to+--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'+--     /must/ be greater than or equal to the @viewportCount@ parameter in+--     the last call to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndirect-VkPipelineVieportCreateInfo-04141# If the+--     bound graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled and an instance of+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics+--     pipeline /must/ have been created with+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndirect-VkPipelineVieportCreateInfo-04142# If the+--     bound graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled and an instance of+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics+--     pipeline /must/ have been created with+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndirect-primitiveTopology-03420# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'+--     dynamic state enabled then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @primitiveTopology@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+--     /must/ be of the same+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>+--     as the pipeline+--     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@+--     state+--+-- -   #VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+--     limit is not supported, the bound graphics pipeline was created with+--     the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, and any of the shader stages of the bound+--     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,+--     then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ be @1@+--+-- -   #VUID-vkCmdDrawIndirect-None-04007# All vertex input bindings+--     accessed via vertex input variables declared in the vertex shader+--     entry point’s interface /must/ have either valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound+--+-- -   #VUID-vkCmdDrawIndirect-None-04008# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+--     feature is not enabled, all vertex input bindings accessed via+--     vertex input variables declared in the vertex shader entry point’s+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdDrawIndirect-None-02721# For a given vertex buffer+--     binding, any attribute data fetched /must/ be entirely contained+--     within the corresponding vertex buffer binding, as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>+--+-- -   #VUID-vkCmdDrawIndirect-buffer-02708# If @buffer@ is non-sparse then+--     it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdDrawIndirect-buffer-02709# @buffer@ /must/ have been+--     created with the+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'+--     bit set+--+-- -   #VUID-vkCmdDrawIndirect-offset-02710# @offset@ /must/ be a multiple+--     of @4@+--+-- -   #VUID-vkCmdDrawIndirect-commandBuffer-02711# @commandBuffer@ /must/+--     not be a protected command buffer+--+-- -   #VUID-vkCmdDrawIndirect-drawCount-02718# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>+--     feature is not enabled, @drawCount@ /must/ be @0@ or @1@+--+-- -   #VUID-vkCmdDrawIndirect-drawCount-02719# @drawCount@ /must/ be less+--     than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@+--+-- -   #VUID-vkCmdDrawIndirect-firstInstance-00478# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>+--     feature is not enabled, all the @firstInstance@ members of the+--     'Vulkan.Core10.OtherTypes.DrawIndirectCommand' structures accessed+--     by this command /must/ be @0@+--+-- -   #VUID-vkCmdDrawIndirect-drawCount-00476# If @drawCount@ is greater+--     than @1@, @stride@ /must/ be a multiple of @4@ and /must/ be greater+--     than or equal to+--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')+--+-- -   #VUID-vkCmdDrawIndirect-drawCount-00487# If @drawCount@ is equal to+--     @1@, (@offset@ ++--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be+--     less than or equal to the size of @buffer@+--+-- -   #VUID-vkCmdDrawIndirect-drawCount-00488# If @drawCount@ is greater+--     than @1@, (@stride@ × (@drawCount@ - 1) + @offset@ ++--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be+--     less than or equal to the size of @buffer@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdDrawIndirect-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdDrawIndirect-buffer-parameter# @buffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdDrawIndirect-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdDrawIndirect-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdDrawIndirect-renderpass# This command /must/ only be+--     called inside of a render pass instance+--+-- -   #VUID-vkCmdDrawIndirect-commonparent# Both of @buffer@, and+--     @commandBuffer@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdDrawIndirect :: forall io+                 . (MonadIO io)+                => -- | @commandBuffer@ is the command buffer into which the command is+                   -- recorded.+                   CommandBuffer+                -> -- | @buffer@ is the buffer containing draw parameters.+                   Buffer+                -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.+                   ("offset" ::: DeviceSize)+                -> -- | @drawCount@ is the number of draws to execute, and /can/ be zero.+                   ("drawCount" ::: Word32)+                -> -- | @stride@ is the byte stride between successive sets of draw parameters.+                   ("stride" ::: Word32)+                -> io ()+cmdDrawIndirect commandBuffer buffer offset drawCount stride = liftIO $ do+  let vkCmdDrawIndirectPtr = pVkCmdDrawIndirect (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdDrawIndirectPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndirect is null" Nothing Nothing+  let vkCmdDrawIndirect' = mkVkCmdDrawIndirect vkCmdDrawIndirectPtr+  vkCmdDrawIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdDrawIndexedIndirect+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> Word32 -> Word32 -> IO ()++-- | vkCmdDrawIndexedIndirect - Perform an indexed indirect draw+--+-- = Description+--+-- 'cmdDrawIndexedIndirect' behaves similarly to 'cmdDrawIndexed' except+-- that the parameters are read by the device from a buffer during+-- execution. @drawCount@ draws are executed by the command, with+-- parameters taken from @buffer@ starting at @offset@ and increasing by+-- @stride@ bytes for each successive draw. The parameters of each draw are+-- encoded in an array of+-- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures. If+-- @drawCount@ is less than or equal to one, @stride@ is ignored.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdDrawIndexedIndirect-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+--     this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic+--     operations as a result of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering, as specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+--     reduction mode of either+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+--     or+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+--     as a result of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering together with minmax filtering, as+--     specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+--     sampled as a result of this command /must/ only be sampled using a+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02698# For each push constant+--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'+--     bound to the pipeline bind point used by this command, a push+--     constant value /must/ have been set for the same pipeline bind+--     point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is+--     compatible for push constants, with the+--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current+--     'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02699# Descriptors in each bound+--     descriptor set, specified via 'cmdBindDescriptorSets', /must/ be+--     valid if they are statically used by the+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+--     used by this command+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02700# A valid pipeline /must/+--     be bound to the pipeline bind point used by this command+--+-- -   #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02859# There /must/ not have+--     been any calls to dynamic state setting commands for any state not+--     specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object+--     bound to the pipeline bind point used by this command, since that+--     pipeline was bound+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used to sample from any+--     'Vulkan.Core10.Handles.Image' with a+--     'Vulkan.Core10.Handles.ImageView' of the type+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+--     any shader stage+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that+--     includes a LOD bias or any offset values, in any shader stage+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a uniform buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02706# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a storage buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707# If+--     @commandBuffer@ is an unprotected command buffer, any resource+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the+--     pipeline bind point used by this command /must/ not be a protected+--     resource+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDrawIndexedIndirect-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDrawIndexedIndirect-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDrawIndexedIndirect-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDrawIndexedIndirect-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDrawIndexedIndirect-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDrawIndexedIndirect-sparseImageInt64Atomics-04474# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+--     created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDrawIndexedIndirect-sparseImageInt64Atomics-04475# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+--     created with the+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDrawIndexedIndirect-renderPass-02684# The current render+--     pass /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+--     with the @renderPass@ member of the+--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+--     to+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-subpass-02685# The subpass index of+--     the current render pass /must/ be equal to the @subpass@ member of+--     the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound+--     to+--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02686# Every input attachment+--     used by the current subpass /must/ be bound to the pipeline via a+--     descriptor set+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-04584# Image subresources used+--     as attachments in the current render pass /must/ not be accessed in+--     any way other than as an attachment by this command, except for+--     cases involving read-only access to depth\/stencil attachments as+--     described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter+--+-- -   #VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688# If+--     the draw is recorded in a render pass instance with multiview+--     enabled, the maximum instance index /must/ be less than or equal to+--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@+--+-- -   #VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689# If the+--     bound graphics pipeline was created with+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@+--     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass+--     has a depth\/stencil attachment, then that attachment /must/ have+--     been created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'+--     bit set+--+-- -   #VUID-vkCmdDrawIndexedIndirect-viewportCount-03417# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     dynamic state enabled, then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ match the+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@+--     of the pipeline+--+-- -   #VUID-vkCmdDrawIndexedIndirect-scissorCount-03418# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @scissorCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ match the+--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@+--     of the pipeline+--+-- -   #VUID-vkCmdDrawIndexedIndirect-viewportCount-03419# If the bound+--     graphics pipeline state was created with both the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic states enabled then both+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     and+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ match the @scissorCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-viewportCount-04137# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+--     dynamic state enabled, then the bound graphics pipeline /must/ have+--     been created with+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-viewportCount-04138# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'+--     dynamic states enabled then the @viewportCount@ parameter in the+--     last call to+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'+--     /must/ be greater than or equal to the @viewportCount@ parameter in+--     the last call to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-viewportCount-04139# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, but not the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+--     dynamic state enabled, then the bound graphics pipeline /must/ have+--     been created with+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-viewportCount-04140# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'+--     dynamic states enabled then the @viewportCount@ parameter in the+--     last call to+--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'+--     /must/ be greater than or equal to the @viewportCount@ parameter in+--     the last call to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-VkPipelineVieportCreateInfo-04141# If+--     the bound graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled and an instance of+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics+--     pipeline /must/ have been created with+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-VkPipelineVieportCreateInfo-04142# If+--     the bound graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled and an instance of+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+--     chained from @VkPipelineVieportCreateInfo@, then the bound graphics+--     pipeline /must/ have been created with+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@+--     greater or equal to the @viewportCount@ parameter in the last call+--     to+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420# If the bound+--     graphics pipeline state was created with the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'+--     dynamic state enabled then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @primitiveTopology@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'+--     /must/ be of the same+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>+--     as the pipeline+--     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@+--     state+--+-- -   #VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+--     limit is not supported, the bound graphics pipeline was created with+--     the+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     dynamic state enabled, and any of the shader stages of the bound+--     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,+--     then+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ have been called in the current command buffer prior to this+--     draw command, and the @viewportCount@ parameter of+--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+--     /must/ be @1@+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-04007# All vertex input bindings+--     accessed via vertex input variables declared in the vertex shader+--     entry point’s interface /must/ have either valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-04008# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>+--     feature is not enabled, all vertex input bindings accessed via+--     vertex input variables declared in the vertex shader entry point’s+--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdDrawIndexedIndirect-None-02721# For a given vertex buffer+--     binding, any attribute data fetched /must/ be entirely contained+--     within the corresponding vertex buffer binding, as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>+--+-- -   #VUID-vkCmdDrawIndexedIndirect-buffer-02708# If @buffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdDrawIndexedIndirect-buffer-02709# @buffer@ /must/ have+--     been created with the+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'+--     bit set+--+-- -   #VUID-vkCmdDrawIndexedIndirect-offset-02710# @offset@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711# @commandBuffer@+--     /must/ not be a protected command buffer+--+-- -   #VUID-vkCmdDrawIndexedIndirect-drawCount-02718# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect>+--     feature is not enabled, @drawCount@ /must/ be @0@ or @1@+--+-- -   #VUID-vkCmdDrawIndexedIndirect-drawCount-02719# @drawCount@ /must/+--     be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@+--+-- -   #VUID-vkCmdDrawIndexedIndirect-drawCount-00528# If @drawCount@ is+--     greater than @1@, @stride@ /must/ be a multiple of @4@ and /must/ be+--     greater than or equal to+--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')+--+-- -   #VUID-vkCmdDrawIndexedIndirect-firstInstance-00530# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance>+--     feature is not enabled, all the @firstInstance@ members of the+--     'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures+--     accessed by this command /must/ be @0@+--+-- -   #VUID-vkCmdDrawIndexedIndirect-drawCount-00539# If @drawCount@ is+--     equal to @1@, (@offset@ ++--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))+--     /must/ be less than or equal to the size of @buffer@+--+-- -   #VUID-vkCmdDrawIndexedIndirect-drawCount-00540# If @drawCount@ is+--     greater than @1@, (@stride@ × (@drawCount@ - 1) + @offset@ ++--     @sizeof@('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'))+--     /must/ be less than or equal to the size of @buffer@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdDrawIndexedIndirect-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdDrawIndexedIndirect-buffer-parameter# @buffer@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdDrawIndexedIndirect-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdDrawIndexedIndirect-renderpass# This command /must/ only+--     be called inside of a render pass instance+--+-- -   #VUID-vkCmdDrawIndexedIndirect-commonparent# Both of @buffer@, and+--     @commandBuffer@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdDrawIndexedIndirect :: forall io+                        . (MonadIO io)+                       => -- | @commandBuffer@ is the command buffer into which the command is+                          -- recorded.+                          CommandBuffer+                       -> -- | @buffer@ is the buffer containing draw parameters.+                          Buffer+                       -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.+                          ("offset" ::: DeviceSize)+                       -> -- | @drawCount@ is the number of draws to execute, and /can/ be zero.+                          ("drawCount" ::: Word32)+                       -> -- | @stride@ is the byte stride between successive sets of draw parameters.+                          ("stride" ::: Word32)+                       -> io ()+cmdDrawIndexedIndirect commandBuffer buffer offset drawCount stride = liftIO $ do+  let vkCmdDrawIndexedIndirectPtr = pVkCmdDrawIndexedIndirect (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdDrawIndexedIndirectPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDrawIndexedIndirect is null" Nothing Nothing+  let vkCmdDrawIndexedIndirect' = mkVkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirectPtr+  vkCmdDrawIndexedIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset) (drawCount) (stride)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdDispatch+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Word32 -> Word32 -> IO ()++-- | vkCmdDispatch - Dispatch compute work items+--+-- = Description+--+-- When the command is executed, a global workgroup consisting of+-- @groupCountX@ × @groupCountY@ × @groupCountZ@ local workgroups is+-- assembled.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdDispatch-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+--     this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdDispatch-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic+--     operations as a result of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- -   #VUID-vkCmdDispatch-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdDispatch-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering, as specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDispatch-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+--     reduction mode of either+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+--     or+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+--     as a result of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering together with minmax filtering, as+--     specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDispatch-flags-02696# Any 'Vulkan.Core10.Handles.Image'+--     created with a 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@+--     containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+--     sampled as a result of this command /must/ only be sampled using a+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- -   #VUID-vkCmdDispatch-None-02697# For each set /n/ that is statically+--     used by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline+--     bind point used by this command, a descriptor set /must/ have been+--     bound to /n/ at the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDispatch-None-02698# For each push constant that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDispatch-None-02699# Descriptors in each bound descriptor+--     set, specified via 'cmdBindDescriptorSets', /must/ be valid if they+--     are statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to+--     the pipeline bind point used by this command+--+-- -   #VUID-vkCmdDispatch-None-02700# A valid pipeline /must/ be bound to+--     the pipeline bind point used by this command+--+-- -   #VUID-vkCmdDispatch-commandBuffer-02701# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic+--+-- -   #VUID-vkCmdDispatch-None-02859# There /must/ not have been any calls+--     to dynamic state setting commands for any state not specified as+--     dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to the+--     pipeline bind point used by this command, since that pipeline was+--     bound+--+-- -   #VUID-vkCmdDispatch-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used to sample from any+--     'Vulkan.Core10.Handles.Image' with a+--     'Vulkan.Core10.Handles.ImageView' of the type+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+--     any shader stage+--+-- -   #VUID-vkCmdDispatch-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- -   #VUID-vkCmdDispatch-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that+--     includes a LOD bias or any offset values, in any shader stage+--+-- -   #VUID-vkCmdDispatch-None-02705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a uniform buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDispatch-None-02706# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a storage buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDispatch-commandBuffer-02707# If @commandBuffer@ is an+--     unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource+--+-- -   #VUID-vkCmdDispatch-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDispatch-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDispatch-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDispatch-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDispatch-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDispatch-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDispatch-sparseImageInt64Atomics-04474# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+--     created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDispatch-sparseImageInt64Atomics-04475# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+--     created with the+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDispatch-commandBuffer-02712# If @commandBuffer@ is a+--     protected command buffer, any resource written to by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be an unprotected resource+--+-- -   #VUID-vkCmdDispatch-commandBuffer-02713# If @commandBuffer@ is a+--     protected command buffer, pipeline stages other than the+--     framebuffer-space and compute stages in the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point /must/ not write to any resource+--+-- -   #VUID-vkCmdDispatch-groupCountX-00386# @groupCountX@ /must/ be less+--     than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]+--+-- -   #VUID-vkCmdDispatch-groupCountY-00387# @groupCountY@ /must/ be less+--     than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]+--+-- -   #VUID-vkCmdDispatch-groupCountZ-00388# @groupCountZ@ /must/ be less+--     than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdDispatch-commandBuffer-parameter# @commandBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdDispatch-commandBuffer-recording# @commandBuffer@ /must/+--     be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdDispatch-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdDispatch-renderpass# This command /must/ only be called+--     outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               | Compute                                                                                                                             |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdDispatch :: forall io+             . (MonadIO io)+            => -- | @commandBuffer@ is the command buffer into which the command will be+               -- recorded.+               CommandBuffer+            -> -- | @groupCountX@ is the number of local workgroups to dispatch in the X+               -- dimension.+               ("groupCountX" ::: Word32)+            -> -- | @groupCountY@ is the number of local workgroups to dispatch in the Y+               -- dimension.+               ("groupCountY" ::: Word32)+            -> -- | @groupCountZ@ is the number of local workgroups to dispatch in the Z+               -- dimension.+               ("groupCountZ" ::: Word32)+            -> io ()+cmdDispatch commandBuffer groupCountX groupCountY groupCountZ = liftIO $ do+  let vkCmdDispatchPtr = pVkCmdDispatch (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdDispatchPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatch is null" Nothing Nothing+  let vkCmdDispatch' = mkVkCmdDispatch vkCmdDispatchPtr+  vkCmdDispatch' (commandBufferHandle (commandBuffer)) (groupCountX) (groupCountY) (groupCountZ)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdDispatchIndirect+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> IO ()++-- | vkCmdDispatchIndirect - Dispatch compute work items using indirect+-- parameters+--+-- = Description+--+-- 'cmdDispatchIndirect' behaves similarly to 'cmdDispatch' except that the+-- parameters are read by the device from a buffer during execution. The+-- parameters of the dispatch are encoded in a+-- 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand' structure taken from+-- @buffer@ starting at @offset@.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdDispatchIndirect-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+--     this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdDispatchIndirect-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic+--     operations as a result of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- -   #VUID-vkCmdDispatchIndirect-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdDispatchIndirect-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering, as specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+--     reduction mode of either+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+--     or+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+--     as a result of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering together with minmax filtering, as+--     specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdDispatchIndirect-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+--     sampled as a result of this command /must/ only be sampled using a+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- -   #VUID-vkCmdDispatchIndirect-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDispatchIndirect-None-02698# For each push constant that+--     is statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to+--     the pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdDispatchIndirect-None-02699# Descriptors in each bound+--     descriptor set, specified via 'cmdBindDescriptorSets', /must/ be+--     valid if they are statically used by the+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+--     used by this command+--+-- -   #VUID-vkCmdDispatchIndirect-None-02700# A valid pipeline /must/ be+--     bound to the pipeline bind point used by this command+--+-- -   #VUID-vkCmdDispatchIndirect-commandBuffer-02701# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic+--+-- -   #VUID-vkCmdDispatchIndirect-None-02859# There /must/ not have been+--     any calls to dynamic state setting commands for any state not+--     specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object+--     bound to the pipeline bind point used by this command, since that+--     pipeline was bound+--+-- -   #VUID-vkCmdDispatchIndirect-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used to sample from any+--     'Vulkan.Core10.Handles.Image' with a+--     'Vulkan.Core10.Handles.ImageView' of the type+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+--     any shader stage+--+-- -   #VUID-vkCmdDispatchIndirect-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- -   #VUID-vkCmdDispatchIndirect-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that+--     includes a LOD bias or any offset values, in any shader stage+--+-- -   #VUID-vkCmdDispatchIndirect-None-02705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a uniform buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDispatchIndirect-None-02706# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a storage buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdDispatchIndirect-commandBuffer-02707# If @commandBuffer@+--     is an unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource+--+-- -   #VUID-vkCmdDispatchIndirect-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDispatchIndirect-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdDispatchIndirect-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDispatchIndirect-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDispatchIndirect-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdDispatchIndirect-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdDispatchIndirect-sparseImageInt64Atomics-04474# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+--     created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDispatchIndirect-sparseImageInt64Atomics-04475# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+--     created with the+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdDispatchIndirect-buffer-02708# If @buffer@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdDispatchIndirect-buffer-02709# @buffer@ /must/ have been+--     created with the+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'+--     bit set+--+-- -   #VUID-vkCmdDispatchIndirect-offset-02710# @offset@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-vkCmdDispatchIndirect-commandBuffer-02711# @commandBuffer@+--     /must/ not be a protected command buffer+--+-- -   #VUID-vkCmdDispatchIndirect-offset-00407# The sum of @offset@ and+--     the size of 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand'+--     /must/ be less than or equal to the size of @buffer@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdDispatchIndirect-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdDispatchIndirect-buffer-parameter# @buffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdDispatchIndirect-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdDispatchIndirect-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- -   #VUID-vkCmdDispatchIndirect-commonparent# Both of @buffer@, and+--     @commandBuffer@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               | Compute                                                                                                                             |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdDispatchIndirect :: forall io+                     . (MonadIO io)+                    => -- | @commandBuffer@ is the command buffer into which the command will be+                       -- recorded.+                       CommandBuffer+                    -> -- | @buffer@ is the buffer containing dispatch parameters.+                       Buffer+                    -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.+                       ("offset" ::: DeviceSize)+                    -> io ()+cmdDispatchIndirect commandBuffer buffer offset = liftIO $ do+  let vkCmdDispatchIndirectPtr = pVkCmdDispatchIndirect (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdDispatchIndirectPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdDispatchIndirect is null" Nothing Nothing+  let vkCmdDispatchIndirect' = mkVkCmdDispatchIndirect vkCmdDispatchIndirectPtr+  vkCmdDispatchIndirect' (commandBufferHandle (commandBuffer)) (buffer) (offset)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyBuffer+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Buffer -> Word32 -> Ptr BufferCopy -> IO ()++-- | vkCmdCopyBuffer - Copy data between buffer regions+--+-- = Description+--+-- Each region in @pRegions@ is copied from the source buffer to the same+-- region of the destination buffer. @srcBuffer@ and @dstBuffer@ /can/ be+-- the same buffer or alias the same memory, but the resulting values are+-- undefined if the copy regions overlap in memory.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyBuffer-commandBuffer-01822# If @commandBuffer@ is an+--     unprotected command buffer, then @srcBuffer@ /must/ not be a+--     protected buffer+--+-- -   #VUID-vkCmdCopyBuffer-commandBuffer-01823# If @commandBuffer@ is an+--     unprotected command buffer, then @dstBuffer@ /must/ not be a+--     protected buffer+--+-- -   #VUID-vkCmdCopyBuffer-commandBuffer-01824# If @commandBuffer@ is a+--     protected command buffer, then @dstBuffer@ /must/ not be an+--     unprotected buffer+--+-- -   #VUID-vkCmdCopyBuffer-srcOffset-00113# The @srcOffset@ member of+--     each element of @pRegions@ /must/ be less than the size of+--     @srcBuffer@+--+-- -   #VUID-vkCmdCopyBuffer-dstOffset-00114# The @dstOffset@ member of+--     each element of @pRegions@ /must/ be less than the size of+--     @dstBuffer@+--+-- -   #VUID-vkCmdCopyBuffer-size-00115# The @size@ member of each element+--     of @pRegions@ /must/ be less than or equal to the size of+--     @srcBuffer@ minus @srcOffset@+--+-- -   #VUID-vkCmdCopyBuffer-size-00116# The @size@ member of each element+--     of @pRegions@ /must/ be less than or equal to the size of+--     @dstBuffer@ minus @dstOffset@+--+-- -   #VUID-vkCmdCopyBuffer-pRegions-00117# The union of the source+--     regions, and the union of the destination regions, specified by the+--     elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-vkCmdCopyBuffer-srcBuffer-00118# @srcBuffer@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyBuffer-srcBuffer-00119# If @srcBuffer@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdCopyBuffer-dstBuffer-00120# @dstBuffer@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyBuffer-dstBuffer-00121# If @dstBuffer@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyBuffer-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyBuffer-srcBuffer-parameter# @srcBuffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdCopyBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdCopyBuffer-pRegions-parameter# @pRegions@ /must/ be a+--     valid pointer to an array of @regionCount@ valid 'BufferCopy'+--     structures+--+-- -   #VUID-vkCmdCopyBuffer-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyBuffer-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdCopyBuffer-renderpass# This command /must/ only be called+--     outside of a render pass instance+--+-- -   #VUID-vkCmdCopyBuffer-regionCount-arraylength# @regionCount@ /must/+--     be greater than @0@+--+-- -   #VUID-vkCmdCopyBuffer-commonparent# Each of @commandBuffer@,+--     @dstBuffer@, and @srcBuffer@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'BufferCopy',+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdCopyBuffer :: forall io+               . (MonadIO io)+              => -- | @commandBuffer@ is the command buffer into which the command will be+                 -- recorded.+                 CommandBuffer+              -> -- | @srcBuffer@ is the source buffer.+                 ("srcBuffer" ::: Buffer)+              -> -- | @dstBuffer@ is the destination buffer.+                 ("dstBuffer" ::: Buffer)+              -> -- | @pRegions@ is a pointer to an array of 'BufferCopy' structures+                 -- specifying the regions to copy.+                 ("regions" ::: Vector BufferCopy)+              -> io ()+cmdCopyBuffer commandBuffer srcBuffer dstBuffer regions = liftIO . evalContT $ do+  let vkCmdCopyBufferPtr = pVkCmdCopyBuffer (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyBufferPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBuffer is null" Nothing Nothing+  let vkCmdCopyBuffer' = mkVkCmdCopyBuffer vkCmdCopyBufferPtr+  pPRegions <- ContT $ allocaBytesAligned @BufferCopy ((Data.Vector.length (regions)) * 24) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (24 * (i)) :: Ptr BufferCopy) (e) . ($ ())) (regions)+  lift $ vkCmdCopyBuffer' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyImage+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageCopy -> IO ()++-- | vkCmdCopyImage - Copy data between images+--+-- = Description+--+-- Each region in @pRegions@ is copied from the source image to the same+-- region of the destination image. @srcImage@ and @dstImage@ /can/ be the+-- same image or alias the same memory.+--+-- The formats of @srcImage@ and @dstImage@ /must/ be compatible. Formats+-- are compatible if they share the same class, as shown in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility Compatible Formats>+-- table. Depth\/stencil formats /must/ match exactly.+--+-- If the format of @srcImage@ or @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,+-- regions of each plane to be copied /must/ be specified separately using+-- the @srcSubresource@ and @dstSubresource@ members of the 'ImageCopy'+-- structure. In this case, the @aspectMask@ of the @srcSubresource@ or+-- @dstSubresource@ that refers to the multi-planar image /must/ be+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For+-- the purposes of 'cmdCopyImage', each plane of a multi-planar image is+-- treated as having the format listed in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>+-- for the plane identified by the @aspectMask@ of the corresponding+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'+-- and to coordinates used in the copy, which correspond to texels in the+-- /plane/ rather than how these texels map to coordinates in the image as+-- a whole.+--+-- Note+--+-- For example, the+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' plane+-- of a 'Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM' image+-- is compatible with an image of format+-- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM' and (less usefully) with+-- the 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'+-- plane of an image of format+-- 'Vulkan.Core10.Enums.Format.FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16',+-- as each texel is 2 bytes in size.+--+-- 'cmdCopyImage' allows copying between /size-compatible/ compressed and+-- uncompressed internal formats. Formats are size-compatible if the texel+-- block size of the uncompressed format is equal to the texel block size+-- of the compressed format. Such a copy does not perform on-the-fly+-- compression or decompression. When copying from an uncompressed format+-- to a compressed format, each texel of uncompressed data of the source+-- image is copied as a raw value to the corresponding compressed texel+-- block of the destination image. When copying from a compressed format to+-- an uncompressed format, each compressed texel block of the source image+-- is copied as a raw value to the corresponding texel of uncompressed data+-- in the destination image. Thus, for example, it is legal to copy between+-- a 128-bit uncompressed format and a compressed format which has a+-- 128-bit sized compressed texel block representing 4×4 texels (using 8+-- bits per texel), or between a 64-bit uncompressed format and a+-- compressed format which has a 64-bit sized compressed texel block+-- representing 4×4 texels (using 4 bits per texel).+--+-- When copying between compressed and uncompressed formats the @extent@+-- members represent the texel dimensions of the source image and not the+-- destination. When copying from a compressed image to an uncompressed+-- image the image texel dimensions written to the uncompressed image will+-- be source extent divided by the compressed texel block dimensions. When+-- copying from an uncompressed image to a compressed image the image texel+-- dimensions written to the compressed image will be the source extent+-- multiplied by the compressed texel block dimensions. In both cases the+-- number of bytes read and the number of bytes written will be identical.+--+-- Copying to or from block-compressed images is typically done in+-- multiples of the compressed texel block size. For this reason the+-- @extent@ /must/ be a multiple of the compressed texel block dimension.+-- There is one exception to this rule which is /required/ to handle+-- compressed images created with dimensions that are not a multiple of the+-- compressed texel block dimensions: if the @srcImage@ is compressed,+-- then:+--+-- -   If @extent.width@ is not a multiple of the compressed texel block+--     width, then (@extent.width@ + @srcOffset.x@) /must/ equal the image+--     subresource width.+--+-- -   If @extent.height@ is not a multiple of the compressed texel block+--     height, then (@extent.height@ + @srcOffset.y@) /must/ equal the+--     image subresource height.+--+-- -   If @extent.depth@ is not a multiple of the compressed texel block+--     depth, then (@extent.depth@ + @srcOffset.z@) /must/ equal the image+--     subresource depth.+--+-- Similarly, if the @dstImage@ is compressed, then:+--+-- -   If @extent.width@ is not a multiple of the compressed texel block+--     width, then (@extent.width@ + @dstOffset.x@) /must/ equal the image+--     subresource width.+--+-- -   If @extent.height@ is not a multiple of the compressed texel block+--     height, then (@extent.height@ + @dstOffset.y@) /must/ equal the+--     image subresource height.+--+-- -   If @extent.depth@ is not a multiple of the compressed texel block+--     depth, then (@extent.depth@ + @dstOffset.z@) /must/ equal the image+--     subresource depth.+--+-- This allows the last compressed texel block of the image in each+-- non-multiple dimension to be included as a source or destination of the+-- copy.+--+-- “@_422@” image formats that are not+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>+-- are treated as having a 2×1 compressed texel block for the purposes of+-- these rules.+--+-- 'cmdCopyImage' /can/ be used to copy image data between multisample+-- images, but both images /must/ have the same number of samples.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyImage-commandBuffer-01825# If @commandBuffer@ is an+--     unprotected command buffer, then @srcImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdCopyImage-commandBuffer-01826# If @commandBuffer@ is an+--     unprotected command buffer, then @dstImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdCopyImage-commandBuffer-01827# If @commandBuffer@ is a+--     protected command buffer, then @dstImage@ /must/ not be an+--     unprotected image+--+-- -   #VUID-vkCmdCopyImage-pRegions-00124# The union of all source+--     regions, and the union of all destination regions, specified by the+--     elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-vkCmdCopyImage-srcImage-01995# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'+--+-- -   #VUID-vkCmdCopyImage-srcImage-00126# @srcImage@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyImage-srcImage-01546# If @srcImage@ is non-sparse+--     then the image or /disjoint/ plane to be copied /must/ be bound+--     completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdCopyImage-srcImageLayout-00128# @srcImageLayout@ /must/+--     specify the layout of the image subresources of @srcImage@ specified+--     in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdCopyImage-srcImageLayout-01917# @srcImageLayout@ /must/+--     be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-vkCmdCopyImage-dstImage-01996# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @dstImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- -   #VUID-vkCmdCopyImage-dstImage-00131# @dstImage@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyImage-dstImage-01547# If @dstImage@ is non-sparse+--     then the image or /disjoint/ plane that is the destination of the+--     copy /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdCopyImage-dstImageLayout-00133# @dstImageLayout@ /must/+--     specify the layout of the image subresources of @dstImage@ specified+--     in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdCopyImage-dstImageLayout-01395# @dstImageLayout@ /must/+--     be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-vkCmdCopyImage-srcImage-01548# If the+--     'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and+--     @dstImage@ is not a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and+--     @dstImage@ /must/ be compatible, as defined+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>+--+-- -   #VUID-vkCmdCopyImage-None-01549# In a copy to or from a plane of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,+--     the 'Vulkan.Core10.Enums.Format.Format' of the image and plane+--     /must/ be compatible according to+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>+--     for the plane being copied+--+-- -   #VUID-vkCmdCopyImage-srcImage-00136# The sample count of @srcImage@+--     and @dstImage@ /must/ match+--+-- -   #VUID-vkCmdCopyImage-srcSubresource-01696# The+--     @srcSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- -   #VUID-vkCmdCopyImage-dstSubresource-01697# The+--     @dstSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- -   #VUID-vkCmdCopyImage-srcSubresource-01698# The+--     @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @srcImage@ was created+--+-- -   #VUID-vkCmdCopyImage-dstSubresource-01699# The+--     @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @dstImage@ was created+--+-- -   #VUID-vkCmdCopyImage-srcOffset-01783# The @srcOffset@ and @extent@+--     members of each element of @pRegions@ /must/ respect the image+--     transfer granularity requirements of @commandBuffer@’s command+--     pool’s queue family, as described in+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- -   #VUID-vkCmdCopyImage-dstOffset-01784# The @dstOffset@ and @extent@+--     members of each element of @pRegions@ /must/ respect the image+--     transfer granularity requirements of @commandBuffer@’s command+--     pool’s queue family, as described in+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- -   #VUID-vkCmdCopyImage-dstImage-02542# @dstImage@ and @srcImage@+--     /must/ not have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-vkCmdCopyImage-srcImage-01551# If neither @srcImage@ nor+--     @dstImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+--     then for each element of @pRegions@, @srcSubresource.aspectMask@ and+--     @dstSubresource.aspectMask@ /must/ match+--+-- -   #VUID-vkCmdCopyImage-srcImage-01552# If @srcImage@ has a+--     'Vulkan.Core10.Enums.Format.Format' with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>+--     then for each element of @pRegions@, @srcSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'+--+-- -   #VUID-vkCmdCopyImage-srcImage-01553# If @srcImage@ has a+--     'Vulkan.Core10.Enums.Format.Format' with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>+--     then for each element of @pRegions@, @srcSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--+-- -   #VUID-vkCmdCopyImage-dstImage-01554# If @dstImage@ has a+--     'Vulkan.Core10.Enums.Format.Format' with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>+--     then for each element of @pRegions@, @dstSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'+--+-- -   #VUID-vkCmdCopyImage-dstImage-01555# If @dstImage@ has a+--     'Vulkan.Core10.Enums.Format.Format' with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>+--     then for each element of @pRegions@, @dstSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--+-- -   #VUID-vkCmdCopyImage-srcImage-01556# If @srcImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+--     and the @dstImage@ does not have a multi-planar image format, then+--     for each element of @pRegions@, @dstSubresource.aspectMask@ /must/+--     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- -   #VUID-vkCmdCopyImage-dstImage-01557# If @dstImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+--     and the @srcImage@ does not have a multi-planar image format, then+--     for each element of @pRegions@, @srcSubresource.aspectMask@ /must/+--     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- -   #VUID-vkCmdCopyImage-srcImage-04443# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+--     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and and+--     @srcSubresource.layerCount@ /must/ be @1@+--+-- -   #VUID-vkCmdCopyImage-dstImage-04444# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+--     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and and+--     @dstSubresource.layerCount@ /must/ be @1@+--+-- -   #VUID-vkCmdCopyImage-aspectMask-00142# For each element of+--     @pRegions@, @srcSubresource.aspectMask@ /must/ specify aspects+--     present in @srcImage@+--+-- -   #VUID-vkCmdCopyImage-aspectMask-00143# For each element of+--     @pRegions@, @dstSubresource.aspectMask@ /must/ specify aspects+--     present in @dstImage@+--+-- -   #VUID-vkCmdCopyImage-srcOffset-00144# For each element of+--     @pRegions@, @srcOffset.x@ and (@extent.width@ + @srcOffset.x@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the width of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImage-srcOffset-00145# For each element of+--     @pRegions@, @srcOffset.y@ and (@extent.height@ + @srcOffset.y@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the height of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImage-srcImage-00146# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@+--     /must/ be @1@+--+-- -   #VUID-vkCmdCopyImage-srcOffset-00147# For each element of+--     @pRegions@, @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the depth of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImage-srcImage-01785# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/+--     be @1@+--+-- -   #VUID-vkCmdCopyImage-dstImage-01786# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/+--     be @1@+--+-- -   #VUID-vkCmdCopyImage-srcImage-01787# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @srcOffset.z@ /must/ be @0@+--+-- -   #VUID-vkCmdCopyImage-dstImage-01788# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @dstOffset.z@ /must/ be @0@+--+-- -   #VUID-vkCmdCopyImage-srcImage-01790# If @srcImage@ and @dstImage@+--     are both of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then+--     for each element of @pRegions@, @extent.depth@ /must/ be @1@+--+-- -   #VUID-vkCmdCopyImage-srcImage-01791# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @dstImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each+--     element of @pRegions@, @extent.depth@ /must/ equal+--     @srcSubresource.layerCount@+--+-- -   #VUID-vkCmdCopyImage-dstImage-01792# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @srcImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each+--     element of @pRegions@, @extent.depth@ /must/ equal+--     @dstSubresource.layerCount@+--+-- -   #VUID-vkCmdCopyImage-dstOffset-00150# For each element of+--     @pRegions@, @dstOffset.x@ and (@extent.width@ + @dstOffset.x@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the width of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdCopyImage-dstOffset-00151# For each element of+--     @pRegions@, @dstOffset.y@ and (@extent.height@ + @dstOffset.y@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the height of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdCopyImage-dstImage-00152# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@+--     /must/ be @1@+--+-- -   #VUID-vkCmdCopyImage-dstOffset-00153# For each element of+--     @pRegions@, @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the depth of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdCopyImage-srcImage-01727# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, all members of @srcOffset@+--     /must/ be a multiple of the corresponding dimensions of the+--     compressed texel block+--+-- -   #VUID-vkCmdCopyImage-srcImage-01728# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.width@ /must/ be a+--     multiple of the compressed texel block width or (@extent.width@ ++--     @srcOffset.x@) /must/ equal the width of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImage-srcImage-01729# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.height@ /must/ be a+--     multiple of the compressed texel block height or (@extent.height@ ++--     @srcOffset.y@) /must/ equal the height of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImage-srcImage-01730# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.depth@ /must/ be a+--     multiple of the compressed texel block depth or (@extent.depth@ ++--     @srcOffset.z@) /must/ equal the depth of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImage-dstImage-01731# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, all members of @dstOffset@+--     /must/ be a multiple of the corresponding dimensions of the+--     compressed texel block+--+-- -   #VUID-vkCmdCopyImage-dstImage-01732# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.width@ /must/ be a+--     multiple of the compressed texel block width or (@extent.width@ ++--     @dstOffset.x@) /must/ equal the width of the specified+--     @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdCopyImage-dstImage-01733# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.height@ /must/ be a+--     multiple of the compressed texel block height or (@extent.height@ ++--     @dstOffset.y@) /must/ equal the height of the specified+--     @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdCopyImage-dstImage-01734# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.depth@ /must/ be a+--     multiple of the compressed texel block depth or (@extent.depth@ ++--     @dstOffset.z@) /must/ equal the depth of the specified+--     @dstSubresource@ of @dstImage@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyImage-commandBuffer-parameter# @commandBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyImage-srcImage-parameter# @srcImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdCopyImage-srcImageLayout-parameter# @srcImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-vkCmdCopyImage-dstImage-parameter# @dstImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdCopyImage-dstImageLayout-parameter# @dstImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-vkCmdCopyImage-pRegions-parameter# @pRegions@ /must/ be a+--     valid pointer to an array of @regionCount@ valid 'ImageCopy'+--     structures+--+-- -   #VUID-vkCmdCopyImage-commandBuffer-recording# @commandBuffer@ /must/+--     be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyImage-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdCopyImage-renderpass# This command /must/ only be called+--     outside of a render pass instance+--+-- -   #VUID-vkCmdCopyImage-regionCount-arraylength# @regionCount@ /must/+--     be greater than @0@+--+-- -   #VUID-vkCmdCopyImage-commonparent# Each of @commandBuffer@,+--     @dstImage@, and @srcImage@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',+-- 'ImageCopy', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+cmdCopyImage :: forall io+              . (MonadIO io)+             => -- | @commandBuffer@ is the command buffer into which the command will be+                -- recorded.+                CommandBuffer+             -> -- | @srcImage@ is the source image.+                ("srcImage" ::: Image)+             -> -- | @srcImageLayout@ is the current layout of the source image subresource.+                ("srcImageLayout" ::: ImageLayout)+             -> -- | @dstImage@ is the destination image.+                ("dstImage" ::: Image)+             -> -- | @dstImageLayout@ is the current layout of the destination image+                -- subresource.+                ("dstImageLayout" ::: ImageLayout)+             -> -- | @pRegions@ is a pointer to an array of 'ImageCopy' structures specifying+                -- the regions to copy.+                ("regions" ::: Vector ImageCopy)+             -> io ()+cmdCopyImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do+  let vkCmdCopyImagePtr = pVkCmdCopyImage (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyImagePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImage is null" Nothing Nothing+  let vkCmdCopyImage' = mkVkCmdCopyImage vkCmdCopyImagePtr+  pPRegions <- ContT $ allocaBytesAligned @ImageCopy ((Data.Vector.length (regions)) * 68) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageCopy) (e) . ($ ())) (regions)+  lift $ vkCmdCopyImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBlitImage+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageBlit -> Filter -> IO ()++-- | vkCmdBlitImage - Copy regions of an image, potentially performing format+-- conversion,+--+-- = Description+--+-- 'cmdBlitImage' /must/ not be used for multisampled source or destination+-- images. Use 'cmdResolveImage' for this purpose.+--+-- As the sizes of the source and destination extents /can/ differ in any+-- dimension, texels in the source extent are scaled and filtered to the+-- destination extent. Scaling occurs via the following operations:+--+-- -   For each destination texel, the integer coordinate of that texel is+--     converted to an unnormalized texture coordinate, using the effective+--     inverse of the equations described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-unnormalized-to-integer unnormalized to integer conversion>:+--+--     -   ubase = i + ½+--+--     -   vbase = j + ½+--+--     -   wbase = k + ½+--+-- -   These base coordinates are then offset by the first destination+--     offset:+--+--     -   uoffset = ubase - xdst0+--+--     -   voffset = vbase - ydst0+--+--     -   woffset = wbase - zdst0+--+--     -   aoffset = a - @baseArrayCount@dst+--+-- -   The scale is determined from the source and destination regions, and+--     applied to the offset coordinates:+--+--     -   scaleu = (xsrc1 - xsrc0) \/ (xdst1 - xdst0)+--+--     -   scalev = (ysrc1 - ysrc0) \/ (ydst1 - ydst0)+--+--     -   scalew = (zsrc1 - zsrc0) \/ (zdst1 - zdst0)+--+--     -   uscaled = uoffset × scaleu+--+--     -   vscaled = voffset × scalev+--+--     -   wscaled = woffset × scalew+--+-- -   Finally the source offset is added to the scaled coordinates, to+--     determine the final unnormalized coordinates used to sample from+--     @srcImage@:+--+--     -   u = uscaled + xsrc0+--+--     -   v = vscaled + ysrc0+--+--     -   w = wscaled + zsrc0+--+--     -   q = @mipLevel@+--+--     -   a = aoffset + @baseArrayCount@src+--+-- These coordinates are used to sample from the source image, as described+-- in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures Image Operations chapter>,+-- with the filter mode equal to that of @filter@, a mipmap mode of+-- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST' and+-- an address mode of+-- 'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'.+-- Implementations /must/ clamp at the edge of the source image, and /may/+-- additionally clamp to the edge of the source region.+--+-- Note+--+-- Due to allowable rounding errors in the generation of the source texture+-- coordinates, it is not always possible to guarantee exactly which source+-- texels will be sampled for a given blit. As rounding errors are+-- implementation dependent, the exact results of a blitting operation are+-- also implementation dependent.+--+-- Blits are done layer by layer starting with the @baseArrayLayer@ member+-- of @srcSubresource@ for the source and @dstSubresource@ for the+-- destination. @layerCount@ layers are blitted to the destination image.+--+-- When blitting 3D textures, slices in the destination region bounded by+-- @dstOffsets@[0].z and @dstOffsets@[1].z are sampled from slices in the+-- source region bounded by @srcOffsets@[0].z and @srcOffsets@[1].z. If the+-- @filter@ parameter is 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' then+-- the value sampled from the source image is taken by doing linear+-- filtering using the interpolated __z__ coordinate represented by __w__+-- in the previous equations. If the @filter@ parameter is+-- 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST' then the value sampled from+-- the source image is taken from the single nearest slice, with an+-- implementation-dependent arithmetic rounding mode.+--+-- The following filtering and conversion rules apply:+--+-- -   Integer formats /can/ only be converted to other integer formats+--     with the same signedness.+--+-- -   No format conversion is supported between depth\/stencil images. The+--     formats /must/ match.+--+-- -   Format conversions on unorm, snorm, unscaled and packed float+--     formats of the copied aspect of the image are performed by first+--     converting the pixels to float values.+--+-- -   For sRGB source formats, nonlinear RGB values are converted to+--     linear representation prior to filtering.+--+-- -   After filtering, the float values are first clamped and then cast to+--     the destination image format. In case of sRGB destination format,+--     linear RGB values are converted to nonlinear representation before+--     writing the pixel to the image.+--+-- Signed and unsigned integers are converted by first clamping to the+-- representable range of the destination format, then casting the value.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBlitImage-commandBuffer-01834# If @commandBuffer@ is an+--     unprotected command buffer, then @srcImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdBlitImage-commandBuffer-01835# If @commandBuffer@ is an+--     unprotected command buffer, then @dstImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdBlitImage-commandBuffer-01836# If @commandBuffer@ is a+--     protected command buffer, then @dstImage@ /must/ not be an+--     unprotected image+--+-- -   #VUID-vkCmdBlitImage-pRegions-00215# The source region specified by+--     each element of @pRegions@ /must/ be a region that is contained+--     within @srcImage@+--+-- -   #VUID-vkCmdBlitImage-pRegions-00216# The destination region+--     specified by each element of @pRegions@ /must/ be a region that is+--     contained within @dstImage@+--+-- -   #VUID-vkCmdBlitImage-pRegions-00217# The union of all destination+--     regions, specified by the elements of @pRegions@, /must/ not overlap+--     in memory with any texel that /may/ be sampled during the blit+--     operation+--+-- -   #VUID-vkCmdBlitImage-srcImage-01999# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'+--+-- -   #VUID-vkCmdBlitImage-srcImage-01561# @srcImage@ /must/ not use a+--     format listed in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>+--+-- -   #VUID-vkCmdBlitImage-srcImage-00219# @srcImage@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-vkCmdBlitImage-srcImage-00220# If @srcImage@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdBlitImage-srcImageLayout-00221# @srcImageLayout@ /must/+--     specify the layout of the image subresources of @srcImage@ specified+--     in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdBlitImage-srcImageLayout-01398# @srcImageLayout@ /must/+--     be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   #VUID-vkCmdBlitImage-dstImage-02000# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @dstImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'+--+-- -   #VUID-vkCmdBlitImage-dstImage-01562# @dstImage@ /must/ not use a+--     format listed in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>+--+-- -   #VUID-vkCmdBlitImage-dstImage-00224# @dstImage@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdBlitImage-dstImage-00225# If @dstImage@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdBlitImage-dstImageLayout-00226# @dstImageLayout@ /must/+--     specify the layout of the image subresources of @dstImage@ specified+--     in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdBlitImage-dstImageLayout-01399# @dstImageLayout@ /must/+--     be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   #VUID-vkCmdBlitImage-srcImage-00229# If either of @srcImage@ or+--     @dstImage@ was created with a signed integer+--     'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been+--     created with a signed integer 'Vulkan.Core10.Enums.Format.Format'+--+-- -   #VUID-vkCmdBlitImage-srcImage-00230# If either of @srcImage@ or+--     @dstImage@ was created with an unsigned integer+--     'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been+--     created with an unsigned integer 'Vulkan.Core10.Enums.Format.Format'+--+-- -   #VUID-vkCmdBlitImage-srcImage-00231# If either of @srcImage@ or+--     @dstImage@ was created with a depth\/stencil format, the other+--     /must/ have exactly the same format+--+-- -   #VUID-vkCmdBlitImage-srcImage-00232# If @srcImage@ was created with+--     a depth\/stencil format, @filter@ /must/ be+--     'Vulkan.Core10.Enums.Filter.FILTER_NEAREST'+--+-- -   #VUID-vkCmdBlitImage-srcImage-00233# @srcImage@ /must/ have been+--     created with a @samples@ value of+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-vkCmdBlitImage-dstImage-00234# @dstImage@ /must/ have been+--     created with a @samples@ value of+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-vkCmdBlitImage-filter-02001# If @filter@ is+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', then the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdBlitImage-filter-02002# If @filter@ is+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', then the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdBlitImage-filter-00237# If @filter@ is+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', @srcImage@+--     /must/ be of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'+--+-- -   #VUID-vkCmdBlitImage-srcSubresource-01705# The+--     @srcSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- -   #VUID-vkCmdBlitImage-dstSubresource-01706# The+--     @dstSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- -   #VUID-vkCmdBlitImage-srcSubresource-01707# The+--     @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @srcImage@ was created+--+-- -   #VUID-vkCmdBlitImage-dstSubresource-01708# The+--     @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @dstImage@ was created+--+-- -   #VUID-vkCmdBlitImage-dstImage-02545# @dstImage@ and @srcImage@+--     /must/ not have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-vkCmdBlitImage-srcImage-00240# If either @srcImage@ or+--     @dstImage@ is of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',+--     then for each element of @pRegions@, @srcSubresource.baseArrayLayer@+--     and @dstSubresource.baseArrayLayer@ /must/ each be @0@, and+--     @srcSubresource.layerCount@ and @dstSubresource.layerCount@ /must/+--     each be @1@.+--+-- -   #VUID-vkCmdBlitImage-aspectMask-00241# For each element of+--     @pRegions@, @srcSubresource.aspectMask@ /must/ specify aspects+--     present in @srcImage@+--+-- -   #VUID-vkCmdBlitImage-aspectMask-00242# For each element of+--     @pRegions@, @dstSubresource.aspectMask@ /must/ specify aspects+--     present in @dstImage@+--+-- -   #VUID-vkCmdBlitImage-srcOffset-00243# For each element of+--     @pRegions@, @srcOffset@[0].x and @srcOffset@[1].x /must/ both be+--     greater than or equal to @0@ and less than or equal to the width of+--     the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdBlitImage-srcOffset-00244# For each element of+--     @pRegions@, @srcOffset@[0].y and @srcOffset@[1].y /must/ both be+--     greater than or equal to @0@ and less than or equal to the height of+--     the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdBlitImage-srcImage-00245# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @srcOffset@[0].y /must/ be @0@ and @srcOffset@[1].y+--     /must/ be @1@+--+-- -   #VUID-vkCmdBlitImage-srcOffset-00246# For each element of+--     @pRegions@, @srcOffset@[0].z and @srcOffset@[1].z /must/ both be+--     greater than or equal to @0@ and less than or equal to the depth of+--     the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdBlitImage-srcImage-00247# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @srcOffset@[0].z /must/ be @0@ and @srcOffset@[1].z+--     /must/ be @1@+--+-- -   #VUID-vkCmdBlitImage-dstOffset-00248# For each element of+--     @pRegions@, @dstOffset@[0].x and @dstOffset@[1].x /must/ both be+--     greater than or equal to @0@ and less than or equal to the width of+--     the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdBlitImage-dstOffset-00249# For each element of+--     @pRegions@, @dstOffset@[0].y and @dstOffset@[1].y /must/ both be+--     greater than or equal to @0@ and less than or equal to the height of+--     the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdBlitImage-dstImage-00250# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @dstOffset@[0].y /must/ be @0@ and @dstOffset@[1].y+--     /must/ be @1@+--+-- -   #VUID-vkCmdBlitImage-dstOffset-00251# For each element of+--     @pRegions@, @dstOffset@[0].z and @dstOffset@[1].z /must/ both be+--     greater than or equal to @0@ and less than or equal to the depth of+--     the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdBlitImage-dstImage-00252# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @dstOffset@[0].z /must/ be @0@ and @dstOffset@[1].z+--     /must/ be @1@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBlitImage-commandBuffer-parameter# @commandBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBlitImage-srcImage-parameter# @srcImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdBlitImage-srcImageLayout-parameter# @srcImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-vkCmdBlitImage-dstImage-parameter# @dstImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdBlitImage-dstImageLayout-parameter# @dstImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-vkCmdBlitImage-pRegions-parameter# @pRegions@ /must/ be a+--     valid pointer to an array of @regionCount@ valid 'ImageBlit'+--     structures+--+-- -   #VUID-vkCmdBlitImage-filter-parameter# @filter@ /must/ be a valid+--     'Vulkan.Core10.Enums.Filter.Filter' value+--+-- -   #VUID-vkCmdBlitImage-commandBuffer-recording# @commandBuffer@ /must/+--     be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBlitImage-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBlitImage-renderpass# This command /must/ only be called+--     outside of a render pass instance+--+-- -   #VUID-vkCmdBlitImage-regionCount-arraylength# @regionCount@ /must/+--     be greater than @0@+--+-- -   #VUID-vkCmdBlitImage-commonparent# Each of @commandBuffer@,+--     @dstImage@, and @srcImage@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.Filter.Filter', 'Vulkan.Core10.Handles.Image',+-- 'ImageBlit', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+cmdBlitImage :: forall io+              . (MonadIO io)+             => -- | @commandBuffer@ is the command buffer into which the command will be+                -- recorded.+                CommandBuffer+             -> -- | @srcImage@ is the source image.+                ("srcImage" ::: Image)+             -> -- | @srcImageLayout@ is the layout of the source image subresources for the+                -- blit.+                ("srcImageLayout" ::: ImageLayout)+             -> -- | @dstImage@ is the destination image.+                ("dstImage" ::: Image)+             -> -- | @dstImageLayout@ is the layout of the destination image subresources for+                -- the blit.+                ("dstImageLayout" ::: ImageLayout)+             -> -- | @pRegions@ is a pointer to an array of 'ImageBlit' structures specifying+                -- the regions to blit.+                ("regions" ::: Vector ImageBlit)+             -> -- | @filter@ is a 'Vulkan.Core10.Enums.Filter.Filter' specifying the filter+                -- to apply if the blits require scaling.+                Filter+             -> io ()+cmdBlitImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions filter' = liftIO . evalContT $ do+  let vkCmdBlitImagePtr = pVkCmdBlitImage (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdBlitImagePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBlitImage is null" Nothing Nothing+  let vkCmdBlitImage' = mkVkCmdBlitImage vkCmdBlitImagePtr+  pPRegions <- ContT $ allocaBytesAligned @ImageBlit ((Data.Vector.length (regions)) * 80) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (80 * (i)) :: Ptr ImageBlit) (e) . ($ ())) (regions)+  lift $ vkCmdBlitImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions) (filter')+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyBufferToImage+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> Image -> ImageLayout -> Word32 -> Ptr BufferImageCopy -> IO ()++-- | vkCmdCopyBufferToImage - Copy data from a buffer into an image+--+-- = Description+--+-- Each region in @pRegions@ is copied from the specified region of the+-- source buffer to the specified region of the destination image.+--+-- If the format of @dstImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,+-- regions of each plane to be a target of a copy /must/ be specified+-- separately using the @pRegions@ member of the 'BufferImageCopy'+-- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/+-- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For+-- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar+-- image is treated as having the format listed in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>+-- for the plane identified by the @aspectMask@ of the corresponding+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'+-- and to coordinates used in the copy, which correspond to texels in the+-- /plane/ rather than how these texels map to coordinates in the image as+-- a whole.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-01828# If @commandBuffer@+--     is an unprotected command buffer, then @srcBuffer@ /must/ not be a+--     protected buffer+--+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-01829# If @commandBuffer@+--     is an unprotected command buffer, then @dstImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-01830# If @commandBuffer@+--     is a protected command buffer, then @dstImage@ /must/ not be an+--     unprotected image+--+-- -   #VUID-vkCmdCopyBufferToImage-pRegions-00172# The image region+--     specified by each element of @pRegions@ /must/ be a region that is+--     contained within @dstImage@ if the @dstImage@’s+--     'Vulkan.Core10.Enums.Format.Format' is not a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     and /must/ be a region that is contained within the plane being+--     copied to if the @dstImage@’s 'Vulkan.Core10.Enums.Format.Format' is+--     a multi-planar format+--+-- -   #VUID-vkCmdCopyBufferToImage-pRegions-00171# @srcBuffer@ /must/ be+--     large enough to contain all buffer locations that are accessed+--     according to+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,+--     for each element of @pRegions@+--+-- -   #VUID-vkCmdCopyBufferToImage-pRegions-00173# The union of all source+--     regions, and the union of all destination regions, specified by the+--     elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-vkCmdCopyBufferToImage-srcBuffer-00174# @srcBuffer@ /must/+--     have been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImage-01997# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @dstImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- -   #VUID-vkCmdCopyBufferToImage-srcBuffer-00176# If @srcBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImage-00177# @dstImage@ /must/ have+--     been created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImage-00178# If @dstImage@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImage-00179# @dstImage@ /must/ have+--     a sample count equal to+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImageLayout-00180# @dstImageLayout@+--     /must/ specify the layout of the image subresources of @dstImage@+--     specified in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImageLayout-01396# @dstImageLayout@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-vkCmdCopyBufferToImage-imageSubresource-01701# The+--     @imageSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- -   #VUID-vkCmdCopyBufferToImage-imageSubresource-01702# The+--     @imageSubresource.baseArrayLayer@ + @imageSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @dstImage@ was created+--+-- -   #VUID-vkCmdCopyBufferToImage-imageOffset-01793# The @imageOffset@+--     and @imageExtent@ members of each element of @pRegions@ /must/+--     respect the image transfer granularity requirements of+--     @commandBuffer@’s command pool’s queue family, as described in+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImage-02543# @dstImage@ /must/ not+--     have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-04052# If the queue+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which+--     @commandBuffer@ was allocated from does not support+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImage-04053# If @dstImage@ has a+--     depth\/stencil format, the @bufferOffset@ member of any element of+--     @pRegions@ /must/ be a multiple of @4@+--+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-04477# If the queue+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which+--     @commandBuffer@ was allocated from does not support+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT', for each+--     element of @pRegions@, the @aspectMask@ member of @imageSubresource@+--     /must/ not be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'.+--+-- -   #VUID-vkCmdCopyBufferToImage-imageOffset-00197# For each element of+--     @pRegions@, @imageOffset.x@ and (@imageExtent.width@ ++--     @imageOffset.x@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the width of the specified @imageSubresource@+--     of @dstImage@ where this refers to the width of the /plane/ of the+--     image involved in the copy in the case of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>+--+-- -   #VUID-vkCmdCopyBufferToImage-imageOffset-00198# For each element of+--     @pRegions@, @imageOffset.y@ and (imageExtent.height ++--     @imageOffset.y@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the height of the specified @imageSubresource@+--     of @dstImage@ where this refers to the height of the /plane/ of the+--     image involved in the copy in the case of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>+--+-- -   #VUID-vkCmdCopyBufferToImage-bufferOffset-01558# If @dstImage@ does+--     not have either a depth\/stencil or a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a+--     multiple of the format’s texel block size+--+-- -   #VUID-vkCmdCopyBufferToImage-bufferOffset-01559# If @dstImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a+--     multiple of the element size of the compatible format for the format+--     and the @aspectMask@ of the @imageSubresource@ as defined in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>+--+-- -   #VUID-vkCmdCopyBufferToImage-srcImage-00199# If @dstImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each+--     element of @pRegions@, @imageOffset.y@ /must/ be @0@ and+--     @imageExtent.height@ /must/ be @1@+--+-- -   #VUID-vkCmdCopyBufferToImage-imageOffset-00200# For each element of+--     @pRegions@, @imageOffset.z@ and (imageExtent.depth ++--     @imageOffset.z@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the depth of the specified @imageSubresource@+--     of @dstImage@+--+-- -   #VUID-vkCmdCopyBufferToImage-srcImage-00201# If @dstImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@+--     /must/ be @1@+--+-- -   #VUID-vkCmdCopyBufferToImage-bufferRowLength-00203# If @dstImage@ is+--     a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferRowLength@ /must/ be a+--     multiple of the compressed texel block width+--+-- -   #VUID-vkCmdCopyBufferToImage-bufferImageHeight-00204# If @dstImage@+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferImageHeight@ /must/ be a+--     multiple of the compressed texel block height+--+-- -   #VUID-vkCmdCopyBufferToImage-imageOffset-00205# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, all members of @imageOffset@ /must/+--     be a multiple of the corresponding dimensions of the compressed+--     texel block+--+-- -   #VUID-vkCmdCopyBufferToImage-bufferOffset-00206# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple+--     of the compressed texel block size in bytes+--+-- -   #VUID-vkCmdCopyBufferToImage-imageExtent-00207# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.width@ /must/ be a+--     multiple of the compressed texel block width or (@imageExtent.width@+--     + @imageOffset.x@) /must/ equal the width of the specified+--     @imageSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdCopyBufferToImage-imageExtent-00208# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.height@ /must/ be a+--     multiple of the compressed texel block height or+--     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of+--     the specified @imageSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdCopyBufferToImage-imageExtent-00209# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.depth@ /must/ be a+--     multiple of the compressed texel block depth or (@imageExtent.depth@+--     + @imageOffset.z@) /must/ equal the depth of the specified+--     @imageSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdCopyBufferToImage-aspectMask-00211# For each element of+--     @pRegions@, @imageSubresource.aspectMask@ /must/ specify aspects+--     present in @dstImage@+--+-- -   #VUID-vkCmdCopyBufferToImage-aspectMask-01560# If @dstImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @imageSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--     (with+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--     valid only for image formats with three planes)+--+-- -   #VUID-vkCmdCopyBufferToImage-baseArrayLayer-00213# If @dstImage@ is+--     of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each+--     element of @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be+--     @0@ and @imageSubresource.layerCount@ /must/ be @1@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyBufferToImage-srcBuffer-parameter# @srcBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImage-parameter# @dstImage@ /must/+--     be a valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdCopyBufferToImage-dstImageLayout-parameter#+--     @dstImageLayout@ /must/ be a valid+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- -   #VUID-vkCmdCopyBufferToImage-pRegions-parameter# @pRegions@ /must/+--     be a valid pointer to an array of @regionCount@ valid+--     'BufferImageCopy' structures+--+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyBufferToImage-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdCopyBufferToImage-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- -   #VUID-vkCmdCopyBufferToImage-regionCount-arraylength# @regionCount@+--     /must/ be greater than @0@+--+-- -   #VUID-vkCmdCopyBufferToImage-commonparent# Each of @commandBuffer@,+--     @dstImage@, and @srcBuffer@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+cmdCopyBufferToImage :: forall io+                      . (MonadIO io)+                     => -- | @commandBuffer@ is the command buffer into which the command will be+                        -- recorded.+                        CommandBuffer+                     -> -- | @srcBuffer@ is the source buffer.+                        ("srcBuffer" ::: Buffer)+                     -> -- | @dstImage@ is the destination image.+                        ("dstImage" ::: Image)+                     -> -- | @dstImageLayout@ is the layout of the destination image subresources for+                        -- the copy.+                        ("dstImageLayout" ::: ImageLayout)+                     -> -- | @pRegions@ is a pointer to an array of 'BufferImageCopy' structures+                        -- specifying the regions to copy.+                        ("regions" ::: Vector BufferImageCopy)+                     -> io ()+cmdCopyBufferToImage commandBuffer srcBuffer dstImage dstImageLayout regions = liftIO . evalContT $ do+  let vkCmdCopyBufferToImagePtr = pVkCmdCopyBufferToImage (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyBufferToImagePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBufferToImage is null" Nothing Nothing+  let vkCmdCopyBufferToImage' = mkVkCmdCopyBufferToImage vkCmdCopyBufferToImagePtr+  pPRegions <- ContT $ allocaBytesAligned @BufferImageCopy ((Data.Vector.length (regions)) * 56) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e) . ($ ())) (regions)+  lift $ vkCmdCopyBufferToImage' (commandBufferHandle (commandBuffer)) (srcBuffer) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyImageToBuffer+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Buffer -> Word32 -> Ptr BufferImageCopy -> IO ()++-- | vkCmdCopyImageToBuffer - Copy image data into a buffer+--+-- = Description+--+-- Each region in @pRegions@ is copied from the specified region of the+-- source image to the specified region of the destination buffer.+--+-- If the 'Vulkan.Core10.Enums.Format.Format' of @srcImage@ is a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>,+-- regions of each plane to be a source of a copy /must/ be specified+-- separately using the @pRegions@ member of the 'BufferImageCopy'+-- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/+-- be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', or+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'. For+-- the purposes of 'cmdCopyBufferToImage', each plane of a multi-planar+-- image is treated as having the format listed in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes>+-- for the plane identified by the @aspectMask@ of the corresponding+-- subresource. This applies both to 'Vulkan.Core10.Enums.Format.Format'+-- and to coordinates used in the copy, which correspond to texels in the+-- /plane/ rather than how these texels map to coordinates in the image as+-- a whole.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-01831# If @commandBuffer@+--     is an unprotected command buffer, then @srcImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-01832# If @commandBuffer@+--     is an unprotected command buffer, then @dstBuffer@ /must/ not be a+--     protected buffer+--+-- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-01833# If @commandBuffer@+--     is a protected command buffer, then @dstBuffer@ /must/ not be an+--     unprotected buffer+--+-- -   #VUID-vkCmdCopyImageToBuffer-pRegions-00182# The image region+--     specified by each element of @pRegions@ /must/ be a region that is+--     contained within @srcImage@ if the @srcImage@’s+--     'Vulkan.Core10.Enums.Format.Format' is not a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     and /must/ be a region that is contained within the plane being+--     copied if the @srcImage@’s 'Vulkan.Core10.Enums.Format.Format' is a+--     multi-planar format+--+-- -   #VUID-vkCmdCopyImageToBuffer-pRegions-00183# @dstBuffer@ /must/ be+--     large enough to contain all buffer locations that are accessed+--     according to+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,+--     for each element of @pRegions@+--+-- -   #VUID-vkCmdCopyImageToBuffer-pRegions-00184# The union of all source+--     regions, and the union of all destination regions, specified by the+--     elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-00186# @srcImage@ /must/ have+--     been created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-01998# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-00187# If @srcImage@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdCopyImageToBuffer-dstBuffer-00191# @dstBuffer@ /must/+--     have been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyImageToBuffer-dstBuffer-00192# If @dstBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-00188# @srcImage@ /must/ have+--     a sample count equal to+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImageLayout-00189# @srcImageLayout@+--     /must/ specify the layout of the image subresources of @srcImage@+--     specified in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImageLayout-01397# @srcImageLayout@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageSubresource-01703# The+--     @imageSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageSubresource-01704# The+--     @imageSubresource.baseArrayLayer@ + @imageSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @srcImage@ was created+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageOffset-01794# The @imageOffset@+--     and @imageExtent@ members of each element of @pRegions@ /must/+--     respect the image transfer granularity requirements of+--     @commandBuffer@’s command pool’s queue family, as described in+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-02544# @srcImage@ /must/ not+--     have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-04054# If the queue+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which+--     @commandBuffer@ was allocated from does not support+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-04055# If @srcImage@ has a+--     depth\/stencil format, the @bufferOffset@ member of any element of+--     @pRegions@ /must/ be a multiple of @4@+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageOffset-00197# For each element of+--     @pRegions@ , @imageOffset.x@ and (@imageExtent.width@ ++--     @imageOffset.x@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the width of the specified @imageSubresource@+--     of @srcImage@ where this refers to the width of the /plane/ of the+--     image involved in the copy in the case of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageOffset-00198# For each element of+--     @pRegions@ , @imageOffset.y@ and (imageExtent.height ++--     @imageOffset.y@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the height of the specified @imageSubresource@+--     of @srcImage@ where this refers to the height of the /plane/ of the+--     image involved in the copy in the case of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>+--+-- -   #VUID-vkCmdCopyImageToBuffer-bufferOffset-01558# If @srcImage@ does+--     not have either a depth\/stencil or a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a+--     multiple of the format’s texel block size+--+-- -   #VUID-vkCmdCopyImageToBuffer-bufferOffset-01559# If @srcImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a+--     multiple of the element size of the compatible format for the format+--     and the @aspectMask@ of the @imageSubresource@ as defined in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-00199# If @srcImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each+--     element of @pRegions@, @imageOffset.y@ /must/ be @0@ and+--     @imageExtent.height@ /must/ be @1@+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageOffset-00200# For each element of+--     @pRegions@, @imageOffset.z@ and (imageExtent.depth ++--     @imageOffset.z@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the depth of the specified @imageSubresource@+--     of @srcImage@+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-00201# If @srcImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@+--     /must/ be @1@+--+-- -   #VUID-vkCmdCopyImageToBuffer-bufferRowLength-00203# If @srcImage@ is+--     a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferRowLength@ /must/ be a+--     multiple of the compressed texel block width+--+-- -   #VUID-vkCmdCopyImageToBuffer-bufferImageHeight-00204# If @srcImage@+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferImageHeight@ /must/ be a+--     multiple of the compressed texel block height+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageOffset-00205# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, all members of @imageOffset@ /must/+--     be a multiple of the corresponding dimensions of the compressed+--     texel block+--+-- -   #VUID-vkCmdCopyImageToBuffer-bufferOffset-00206# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple+--     of the compressed texel block size in bytes+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageExtent-00207# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.width@ /must/ be a+--     multiple of the compressed texel block width or (@imageExtent.width@+--     + @imageOffset.x@) /must/ equal the width of the specified+--     @imageSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageExtent-00208# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.height@ /must/ be a+--     multiple of the compressed texel block height or+--     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of+--     the specified @imageSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImageToBuffer-imageExtent-00209# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.depth@ /must/ be a+--     multiple of the compressed texel block depth or (@imageExtent.depth@+--     + @imageOffset.z@) /must/ equal the depth of the specified+--     @imageSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdCopyImageToBuffer-aspectMask-00211# For each element of+--     @pRegions@, @imageSubresource.aspectMask@ /must/ specify aspects+--     present in @srcImage@+--+-- -   #VUID-vkCmdCopyImageToBuffer-aspectMask-01560# If @srcImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @imageSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--     (with+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--     valid only for image formats with three planes)+--+-- -   #VUID-vkCmdCopyImageToBuffer-baseArrayLayer-00213# If @srcImage@ is+--     of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each+--     element of @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be+--     @0@ and @imageSubresource.layerCount@ /must/ be @1@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImage-parameter# @srcImage@ /must/+--     be a valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdCopyImageToBuffer-srcImageLayout-parameter#+--     @srcImageLayout@ /must/ be a valid+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- -   #VUID-vkCmdCopyImageToBuffer-dstBuffer-parameter# @dstBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdCopyImageToBuffer-pRegions-parameter# @pRegions@ /must/+--     be a valid pointer to an array of @regionCount@ valid+--     'BufferImageCopy' structures+--+-- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyImageToBuffer-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdCopyImageToBuffer-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- -   #VUID-vkCmdCopyImageToBuffer-regionCount-arraylength# @regionCount@+--     /must/ be greater than @0@+--+-- -   #VUID-vkCmdCopyImageToBuffer-commonparent# Each of @commandBuffer@,+--     @dstBuffer@, and @srcImage@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy',+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+cmdCopyImageToBuffer :: forall io+                      . (MonadIO io)+                     => -- | @commandBuffer@ is the command buffer into which the command will be+                        -- recorded.+                        CommandBuffer+                     -> -- | @srcImage@ is the source image.+                        ("srcImage" ::: Image)+                     -> -- | @srcImageLayout@ is the layout of the source image subresources for the+                        -- copy.+                        ("srcImageLayout" ::: ImageLayout)+                     -> -- | @dstBuffer@ is the destination buffer.+                        ("dstBuffer" ::: Buffer)+                     -> -- | @pRegions@ is a pointer to an array of 'BufferImageCopy' structures+                        -- specifying the regions to copy.+                        ("regions" ::: Vector BufferImageCopy)+                     -> io ()+cmdCopyImageToBuffer commandBuffer srcImage srcImageLayout dstBuffer regions = liftIO . evalContT $ do+  let vkCmdCopyImageToBufferPtr = pVkCmdCopyImageToBuffer (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyImageToBufferPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImageToBuffer is null" Nothing Nothing+  let vkCmdCopyImageToBuffer' = mkVkCmdCopyImageToBuffer vkCmdCopyImageToBufferPtr+  pPRegions <- ContT $ allocaBytesAligned @BufferImageCopy ((Data.Vector.length (regions)) * 56) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (56 * (i)) :: Ptr BufferImageCopy) (e) . ($ ())) (regions)+  lift $ vkCmdCopyImageToBuffer' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstBuffer) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdUpdateBuffer+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Ptr () -> IO ()++-- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory+--+-- = Description+--+-- @dataSize@ /must/ be less than or equal to 65536 bytes. For larger+-- updates, applications /can/ use buffer to buffer+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers copies>.+--+-- Note+--+-- Buffer updates performed with 'cmdUpdateBuffer' first copy the data into+-- command buffer memory when the command is recorded (which requires+-- additional storage and may incur an additional allocation), and then+-- copy the data from the command buffer into @dstBuffer@ when the command+-- is executed on a device.+--+-- The additional cost of this functionality compared to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers buffer to buffer copies>+-- means it is only recommended for very small amounts of data, and is why+-- it is limited to only 65536 bytes.+--+-- Applications /can/ work around this by issuing multiple+-- 'cmdUpdateBuffer' commands to different ranges of the same buffer, but+-- it is strongly recommended that they /should/ not.+--+-- The source data is copied from the user pointer to the command buffer+-- when the command is called.+--+-- 'cmdUpdateBuffer' is only allowed outside of a render pass. This command+-- is treated as “transfer” operation, for the purposes of synchronization+-- barriers. The+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- /must/ be specified in @usage@ of+-- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be+-- compatible with 'cmdUpdateBuffer'.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdUpdateBuffer-dstOffset-00032# @dstOffset@ /must/ be less+--     than the size of @dstBuffer@+--+-- -   #VUID-vkCmdUpdateBuffer-dataSize-00033# @dataSize@ /must/ be less+--     than or equal to the size of @dstBuffer@ minus @dstOffset@+--+-- -   #VUID-vkCmdUpdateBuffer-dstBuffer-00034# @dstBuffer@ /must/ have+--     been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdUpdateBuffer-dstBuffer-00035# If @dstBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdUpdateBuffer-dstOffset-00036# @dstOffset@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-vkCmdUpdateBuffer-dataSize-00037# @dataSize@ /must/ be less+--     than or equal to @65536@+--+-- -   #VUID-vkCmdUpdateBuffer-dataSize-00038# @dataSize@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-vkCmdUpdateBuffer-commandBuffer-01813# If @commandBuffer@ is+--     an unprotected command buffer, then @dstBuffer@ /must/ not be a+--     protected buffer+--+-- -   #VUID-vkCmdUpdateBuffer-commandBuffer-01814# If @commandBuffer@ is a+--     protected command buffer, then @dstBuffer@ /must/ not be an+--     unprotected buffer+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdUpdateBuffer-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdUpdateBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdUpdateBuffer-pData-parameter# @pData@ /must/ be a valid+--     pointer to an array of @dataSize@ bytes+--+-- -   #VUID-vkCmdUpdateBuffer-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdUpdateBuffer-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdUpdateBuffer-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- -   #VUID-vkCmdUpdateBuffer-dataSize-arraylength# @dataSize@ /must/ be+--     greater than @0@+--+-- -   #VUID-vkCmdUpdateBuffer-commonparent# Both of @commandBuffer@, and+--     @dstBuffer@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdUpdateBuffer :: forall io+                 . (MonadIO io)+                => -- | @commandBuffer@ is the command buffer into which the command will be+                   -- recorded.+                   CommandBuffer+                -> -- | @dstBuffer@ is a handle to the buffer to be updated.+                   ("dstBuffer" ::: Buffer)+                -> -- | @dstOffset@ is the byte offset into the buffer to start updating, and+                   -- /must/ be a multiple of 4.+                   ("dstOffset" ::: DeviceSize)+                -> -- | @dataSize@ is the number of bytes to update, and /must/ be a multiple of+                   -- 4.+                   ("dataSize" ::: DeviceSize)+                -> -- | @pData@ is a pointer to the source data for the buffer update, and+                   -- /must/ be at least @dataSize@ bytes in size.+                   ("data" ::: Ptr ())+                -> io ()+cmdUpdateBuffer commandBuffer dstBuffer dstOffset dataSize data' = liftIO $ do+  let vkCmdUpdateBufferPtr = pVkCmdUpdateBuffer (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdUpdateBufferPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdUpdateBuffer is null" Nothing Nothing+  let vkCmdUpdateBuffer' = mkVkCmdUpdateBuffer vkCmdUpdateBufferPtr+  vkCmdUpdateBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (dataSize) (data')+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdFillBuffer+  :: FunPtr (Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Buffer -> DeviceSize -> DeviceSize -> Word32 -> IO ()++-- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value+--+-- = Description+--+-- 'cmdFillBuffer' is treated as “transfer” operation for the purposes of+-- synchronization barriers. The+-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+-- /must/ be specified in @usage@ of+-- 'Vulkan.Core10.Buffer.BufferCreateInfo' in order for the buffer to be+-- compatible with 'cmdFillBuffer'.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdFillBuffer-dstOffset-00024# @dstOffset@ /must/ be less+--     than the size of @dstBuffer@+--+-- -   #VUID-vkCmdFillBuffer-dstOffset-00025# @dstOffset@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-vkCmdFillBuffer-size-00026# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be greater+--     than @0@+--+-- -   #VUID-vkCmdFillBuffer-size-00027# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be less than+--     or equal to the size of @dstBuffer@ minus @dstOffset@+--+-- -   #VUID-vkCmdFillBuffer-size-00028# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be a multiple+--     of @4@+--+-- -   #VUID-vkCmdFillBuffer-dstBuffer-00029# @dstBuffer@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdFillBuffer-dstBuffer-00031# If @dstBuffer@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdFillBuffer-commandBuffer-01811# If @commandBuffer@ is an+--     unprotected command buffer, then @dstBuffer@ /must/ not be a+--     protected buffer+--+-- -   #VUID-vkCmdFillBuffer-commandBuffer-01812# If @commandBuffer@ is a+--     protected command buffer, then @dstBuffer@ /must/ not be an+--     unprotected buffer+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdFillBuffer-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdFillBuffer-dstBuffer-parameter# @dstBuffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdFillBuffer-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdFillBuffer-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics or compute+--     operations+--+-- -   #VUID-vkCmdFillBuffer-renderpass# This command /must/ only be called+--     outside of a render pass instance+--+-- -   #VUID-vkCmdFillBuffer-commonparent# Both of @commandBuffer@, and+--     @dstBuffer@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdFillBuffer :: forall io+               . (MonadIO io)+              => -- | @commandBuffer@ is the command buffer into which the command will be+                 -- recorded.+                 CommandBuffer+              -> -- | @dstBuffer@ is the buffer to be filled.+                 ("dstBuffer" ::: Buffer)+              -> -- | @dstOffset@ is the byte offset into the buffer at which to start+                 -- filling, and /must/ be a multiple of 4.+                 ("dstOffset" ::: DeviceSize)+              -> -- | @size@ is the number of bytes to fill, and /must/ be either a multiple+                 -- of 4, or 'Vulkan.Core10.APIConstants.WHOLE_SIZE' to fill the range from+                 -- @offset@ to the end of the buffer. If+                 -- 'Vulkan.Core10.APIConstants.WHOLE_SIZE' is used and the remaining size+                 -- of the buffer is not a multiple of 4, then the nearest smaller multiple+                 -- is used.+                 DeviceSize+              -> -- | @data@ is the 4-byte word written repeatedly to the buffer to fill+                 -- @size@ bytes of data. The data word is written to memory according to+                 -- the host endianness.+                 ("data" ::: Word32)+              -> io ()+cmdFillBuffer commandBuffer dstBuffer dstOffset size data' = liftIO $ do+  let vkCmdFillBufferPtr = pVkCmdFillBuffer (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdFillBufferPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdFillBuffer is null" Nothing Nothing+  let vkCmdFillBuffer' = mkVkCmdFillBuffer vkCmdFillBufferPtr+  vkCmdFillBuffer' (commandBufferHandle (commandBuffer)) (dstBuffer) (dstOffset) (size) (data')+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdClearColorImage+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearColorValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()++-- | vkCmdClearColorImage - Clear regions of a color image+--+-- = Description+--+-- Each specified range in @pRanges@ is cleared to the value specified by+-- @pColor@.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdClearColorImage-image-01993# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @image@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- -   #VUID-vkCmdClearColorImage-image-00002# @image@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdClearColorImage-image-01545# @image@ /must/ not use a+--     format listed in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>+--+-- -   #VUID-vkCmdClearColorImage-image-00003# If @image@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdClearColorImage-imageLayout-00004# @imageLayout@ /must/+--     specify the layout of the image subresource ranges of @image@+--     specified in @pRanges@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdClearColorImage-imageLayout-01394# @imageLayout@ /must/+--     be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-vkCmdClearColorImage-aspectMask-02498# The+--     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@+--     members of the elements of the @pRanges@ array /must/ each only+--     include+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- -   #VUID-vkCmdClearColorImage-baseMipLevel-01470# The+--     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseMipLevel@+--     members of the elements of the @pRanges@ array /must/ each be less+--     than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created+--+-- -   #VUID-vkCmdClearColorImage-pRanges-01692# For each+--     'Vulkan.Core10.ImageView.ImageSubresourceRange' element of+--     @pRanges@, if the @levelCount@ member is not+--     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then+--     @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@+--     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was+--     created+--+-- -   #VUID-vkCmdClearColorImage-baseArrayLayer-01472# The+--     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseArrayLayer@+--     members of the elements of the @pRanges@ array /must/ each be less+--     than the @arrayLayers@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created+--+-- -   #VUID-vkCmdClearColorImage-pRanges-01693# For each+--     'Vulkan.Core10.ImageView.ImageSubresourceRange' element of+--     @pRanges@, if the @layerCount@ member is not+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then+--     @baseArrayLayer@ + @layerCount@ /must/ be less than the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @image@ was created+--+-- -   #VUID-vkCmdClearColorImage-image-00007# @image@ /must/ not have a+--     compressed or depth\/stencil format+--+-- -   #VUID-vkCmdClearColorImage-commandBuffer-01805# If @commandBuffer@+--     is an unprotected command buffer, then @image@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdClearColorImage-commandBuffer-01806# If @commandBuffer@+--     is a protected command buffer, then @image@ /must/ not be an+--     unprotected image+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdClearColorImage-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdClearColorImage-image-parameter# @image@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdClearColorImage-imageLayout-parameter# @imageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-vkCmdClearColorImage-pColor-parameter# @pColor@ /must/ be a+--     valid pointer to a valid 'ClearColorValue' union+--+-- -   #VUID-vkCmdClearColorImage-pRanges-parameter# @pRanges@ /must/ be a+--     valid pointer to an array of @rangeCount@ valid+--     'Vulkan.Core10.ImageView.ImageSubresourceRange' structures+--+-- -   #VUID-vkCmdClearColorImage-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdClearColorImage-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdClearColorImage-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- -   #VUID-vkCmdClearColorImage-rangeCount-arraylength# @rangeCount@+--     /must/ be greater than @0@+--+-- -   #VUID-vkCmdClearColorImage-commonparent# Both of @commandBuffer@,+--     and @image@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'ClearColorValue', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'+cmdClearColorImage :: forall io+                    . (MonadIO io)+                   => -- | @commandBuffer@ is the command buffer into which the command will be+                      -- recorded.+                      CommandBuffer+                   -> -- | @image@ is the image to be cleared.+                      Image+                   -> -- | @imageLayout@ specifies the current layout of the image subresource+                      -- ranges to be cleared, and /must/ be+                      -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+                      -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or+                      -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.+                      ImageLayout+                   -> -- | @pColor@ is a pointer to a 'ClearColorValue' structure containing the+                      -- values that the image subresource ranges will be cleared to (see+                      -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>+                      -- below).+                      ClearColorValue+                   -> -- | @pRanges@ is a pointer to an array of+                      -- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures describing a+                      -- range of mipmap levels, array layers, and aspects to be cleared, as+                      -- described in+                      -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.+                      ("ranges" ::: Vector ImageSubresourceRange)+                   -> io ()+cmdClearColorImage commandBuffer image imageLayout color ranges = liftIO . evalContT $ do+  let vkCmdClearColorImagePtr = pVkCmdClearColorImage (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdClearColorImagePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearColorImage is null" Nothing Nothing+  let vkCmdClearColorImage' = mkVkCmdClearColorImage vkCmdClearColorImagePtr+  pColor <- ContT $ withCStruct (color)+  pPRanges <- ContT $ allocaBytesAligned @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e) . ($ ())) (ranges)+  lift $ vkCmdClearColorImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pColor ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdClearDepthStencilImage+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Ptr ClearDepthStencilValue -> Word32 -> Ptr ImageSubresourceRange -> IO ()++-- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil+-- image+--+-- == Valid Usage+--+-- -   #VUID-vkCmdClearDepthStencilImage-image-01994# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @image@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- -   #VUID-vkCmdClearDepthStencilImage-pRanges-02658# If the @aspect@+--     member of any element of @pRanges@ includes+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',+--     and @image@ was created with+--     <VkImageStencilUsageCreateInfo.html separate stencil usage>,+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     /must/ have been included in the+--     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'::@stencilUsage@+--     used to create @image@+--+-- -   #VUID-vkCmdClearDepthStencilImage-pRanges-02659# If the @aspect@+--     member of any element of @pRanges@ includes+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',+--     and @image@ was not created with+--     <VkImageStencilUsageCreateInfo.html separate stencil usage>,+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     /must/ have been included in the+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create+--     @image@+--+-- -   #VUID-vkCmdClearDepthStencilImage-pRanges-02660# If the @aspect@+--     member of any element of @pRanges@ includes+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     /must/ have been included in the+--     'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ used to create+--     @image@+--+-- -   #VUID-vkCmdClearDepthStencilImage-image-00010# If @image@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdClearDepthStencilImage-imageLayout-00011# @imageLayout@+--     /must/ specify the layout of the image subresource ranges of @image@+--     specified in @pRanges@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdClearDepthStencilImage-imageLayout-00012# @imageLayout@+--     /must/ be either of+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   #VUID-vkCmdClearDepthStencilImage-aspectMask-02824# The+--     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member+--     of each element of the @pRanges@ array /must/ not include bits other+--     than+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'+--+-- -   #VUID-vkCmdClearDepthStencilImage-image-02825# If the @image@’s+--     format does not have a stencil component, then the+--     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member+--     of each element of the @pRanges@ array /must/ not include the+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'+--     bit+--+-- -   #VUID-vkCmdClearDepthStencilImage-image-02826# If the @image@’s+--     format does not have a depth component, then the+--     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@aspectMask@ member+--     of each element of the @pRanges@ array /must/ not include the+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' bit+--+-- -   #VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474# The+--     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseMipLevel@+--     members of the elements of the @pRanges@ array /must/ each be less+--     than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created+--+-- -   #VUID-vkCmdClearDepthStencilImage-pRanges-01694# For each+--     'Vulkan.Core10.ImageView.ImageSubresourceRange' element of+--     @pRanges@, if the @levelCount@ member is not+--     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', then+--     @baseMipLevel@ + @levelCount@ /must/ be less than the @mipLevels@+--     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was+--     created+--+-- -   #VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476# The+--     'Vulkan.Core10.ImageView.ImageSubresourceRange'::@baseArrayLayer@+--     members of the elements of the @pRanges@ array /must/ each be less+--     than the @arrayLayers@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created+--+-- -   #VUID-vkCmdClearDepthStencilImage-pRanges-01695# For each+--     'Vulkan.Core10.ImageView.ImageSubresourceRange' element of+--     @pRanges@, if the @layerCount@ member is not+--     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', then+--     @baseArrayLayer@ + @layerCount@ /must/ be less than the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @image@ was created+--+-- -   #VUID-vkCmdClearDepthStencilImage-image-00014# @image@ /must/ have a+--     depth\/stencil format+--+-- -   #VUID-vkCmdClearDepthStencilImage-commandBuffer-01807# If+--     @commandBuffer@ is an unprotected command buffer, then @image@+--     /must/ not be a protected image+--+-- -   #VUID-vkCmdClearDepthStencilImage-commandBuffer-01808# If+--     @commandBuffer@ is a protected command buffer, then @image@ /must/+--     not be an unprotected image+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdClearDepthStencilImage-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdClearDepthStencilImage-image-parameter# @image@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdClearDepthStencilImage-imageLayout-parameter#+--     @imageLayout@ /must/ be a valid+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- -   #VUID-vkCmdClearDepthStencilImage-pDepthStencil-parameter#+--     @pDepthStencil@ /must/ be a valid pointer to a valid+--     'ClearDepthStencilValue' structure+--+-- -   #VUID-vkCmdClearDepthStencilImage-pRanges-parameter# @pRanges@+--     /must/ be a valid pointer to an array of @rangeCount@ valid+--     'Vulkan.Core10.ImageView.ImageSubresourceRange' structures+--+-- -   #VUID-vkCmdClearDepthStencilImage-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdClearDepthStencilImage-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdClearDepthStencilImage-renderpass# This command /must/+--     only be called outside of a render pass instance+--+-- -   #VUID-vkCmdClearDepthStencilImage-rangeCount-arraylength#+--     @rangeCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCmdClearDepthStencilImage-commonparent# Both of+--     @commandBuffer@, and @image@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'ClearDepthStencilValue', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.ImageView.ImageSubresourceRange'+cmdClearDepthStencilImage :: forall io+                           . (MonadIO io)+                          => -- | @commandBuffer@ is the command buffer into which the command will be+                             -- recorded.+                             CommandBuffer+                          -> -- | @image@ is the image to be cleared.+                             Image+                          -> -- | @imageLayout@ specifies the current layout of the image subresource+                             -- ranges to be cleared, and /must/ be+                             -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or+                             -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'.+                             ImageLayout+                          -> -- | @pDepthStencil@ is a pointer to a 'ClearDepthStencilValue' structure+                             -- containing the values that the depth and stencil image subresource+                             -- ranges will be cleared to (see+                             -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears-values>+                             -- below).+                             ClearDepthStencilValue+                          -> -- | @pRanges@ is a pointer to an array of+                             -- 'Vulkan.Core10.ImageView.ImageSubresourceRange' structures describing a+                             -- range of mipmap levels, array layers, and aspects to be cleared, as+                             -- described in+                             -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views Image Views>.+                             ("ranges" ::: Vector ImageSubresourceRange)+                          -> io ()+cmdClearDepthStencilImage commandBuffer image imageLayout depthStencil ranges = liftIO . evalContT $ do+  let vkCmdClearDepthStencilImagePtr = pVkCmdClearDepthStencilImage (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdClearDepthStencilImagePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearDepthStencilImage is null" Nothing Nothing+  let vkCmdClearDepthStencilImage' = mkVkCmdClearDepthStencilImage vkCmdClearDepthStencilImagePtr+  pDepthStencil <- ContT $ withCStruct (depthStencil)+  pPRanges <- ContT $ allocaBytesAligned @ImageSubresourceRange ((Data.Vector.length (ranges)) * 20) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRanges `plusPtr` (20 * (i)) :: Ptr ImageSubresourceRange) (e) . ($ ())) (ranges)+  lift $ vkCmdClearDepthStencilImage' (commandBufferHandle (commandBuffer)) (image) (imageLayout) pDepthStencil ((fromIntegral (Data.Vector.length $ (ranges)) :: Word32)) (pPRanges)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdClearAttachments+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr ClearAttachment -> Word32 -> Ptr ClearRect -> IO ()++-- | vkCmdClearAttachments - Clear regions within bound framebuffer+-- attachments+--+-- = Description+--+-- 'cmdClearAttachments' /can/ clear multiple regions of each attachment+-- used in the current subpass of a render pass instance. This command+-- /must/ be called only inside a render pass instance, and implicitly+-- selects the images to clear based on the current framebuffer attachments+-- and the command parameters.+--+-- If the render pass has a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-fragmentdensitymapattachment fragment density map attachment>,+-- clears follow the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragmentdensitymapops operations of fragment density maps>+-- as if each clear region was a primitive which generates fragments. The+-- clear color is applied to all pixels inside each fragment’s area+-- regardless if the pixels lie outside of the clear region. Clears /may/+-- have a different set of supported fragment areas than draws.+--+-- Unlike other+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#clears clear commands>,+-- 'cmdClearAttachments' executes as a drawing command, rather than a+-- transfer command, with writes performed by it executing in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-order rasterization order>.+-- Clears to color attachments are executed as color attachment writes, by+-- the+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'+-- stage. Clears to depth\/stencil attachments are executed as+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth writes>+-- and+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil writes>+-- by the+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT'+-- and+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT'+-- stages.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdClearAttachments-aspectMask-02501# If the @aspectMask@+--     member of any element of @pAttachments@ contains+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',+--     then the @colorAttachment@ member of that element /must/ either+--     refer to a color attachment which is+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ be a valid+--     color attachment+--+-- -   #VUID-vkCmdClearAttachments-aspectMask-02502# If the @aspectMask@+--     member of any element of @pAttachments@ contains+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',+--     then the current subpass\' depth\/stencil attachment /must/ either+--     be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a+--     depth component+--+-- -   #VUID-vkCmdClearAttachments-aspectMask-02503# If the @aspectMask@+--     member of any element of @pAttachments@ contains+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',+--     then the current subpass\' depth\/stencil attachment /must/ either+--     be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', or /must/ have a+--     stencil component+--+-- -   #VUID-vkCmdClearAttachments-rect-02682# The @rect@ member of each+--     element of @pRects@ /must/ have an @extent.width@ greater than @0@+--+-- -   #VUID-vkCmdClearAttachments-rect-02683# The @rect@ member of each+--     element of @pRects@ /must/ have an @extent.height@ greater than @0@+--+-- -   #VUID-vkCmdClearAttachments-pRects-00016# The rectangular region+--     specified by each element of @pRects@ /must/ be contained within the+--     render area of the current render pass instance+--+-- -   #VUID-vkCmdClearAttachments-pRects-00017# The layers specified by+--     each element of @pRects@ /must/ be contained within every attachment+--     that @pAttachments@ refers to+--+-- -   #VUID-vkCmdClearAttachments-layerCount-01934# The @layerCount@+--     member of each element of @pRects@ /must/ not be @0@+--+-- -   #VUID-vkCmdClearAttachments-commandBuffer-02504# If @commandBuffer@+--     is an unprotected command buffer, then each attachment to be cleared+--     /must/ not be a protected image+--+-- -   #VUID-vkCmdClearAttachments-commandBuffer-02505# If @commandBuffer@+--     is a protected command buffer, then each attachment to be cleared+--     /must/ not be an unprotected image+--+-- -   #VUID-vkCmdClearAttachments-baseArrayLayer-00018# If the render pass+--     instance this is recorded in uses multiview, then @baseArrayLayer@+--     /must/ be zero and @layerCount@ /must/ be one+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdClearAttachments-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdClearAttachments-pAttachments-parameter# @pAttachments@+--     /must/ be a valid pointer to an array of @attachmentCount@ valid+--     'ClearAttachment' structures+--+-- -   #VUID-vkCmdClearAttachments-pRects-parameter# @pRects@ /must/ be a+--     valid pointer to an array of @rectCount@ 'ClearRect' structures+--+-- -   #VUID-vkCmdClearAttachments-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdClearAttachments-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdClearAttachments-renderpass# This command /must/ only be+--     called inside of a render pass instance+--+-- -   #VUID-vkCmdClearAttachments-attachmentCount-arraylength#+--     @attachmentCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCmdClearAttachments-rectCount-arraylength# @rectCount@+--     /must/ be greater than @0@+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'ClearAttachment', 'ClearRect', 'Vulkan.Core10.Handles.CommandBuffer'+cmdClearAttachments :: forall io+                     . (MonadIO io)+                    => -- | @commandBuffer@ is the command buffer into which the command will be+                       -- recorded.+                       CommandBuffer+                    -> -- | @pAttachments@ is a pointer to an array of 'ClearAttachment' structures+                       -- defining the attachments to clear and the clear values to use. If any+                       -- attachment to be cleared in the current subpass is+                       -- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the clear has no+                       -- effect on that attachment.+                       ("attachments" ::: Vector ClearAttachment)+                    -> -- | @pRects@ is a pointer to an array of 'ClearRect' structures defining+                       -- regions within each selected attachment to clear.+                       ("rects" ::: Vector ClearRect)+                    -> io ()+cmdClearAttachments commandBuffer attachments rects = liftIO . evalContT $ do+  let vkCmdClearAttachmentsPtr = pVkCmdClearAttachments (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdClearAttachmentsPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdClearAttachments is null" Nothing Nothing+  let vkCmdClearAttachments' = mkVkCmdClearAttachments vkCmdClearAttachmentsPtr+  pPAttachments <- ContT $ allocaBytesAligned @ClearAttachment ((Data.Vector.length (attachments)) * 24) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments `plusPtr` (24 * (i)) :: Ptr ClearAttachment) (e) . ($ ())) (attachments)+  pPRects <- ContT $ allocaBytesAligned @ClearRect ((Data.Vector.length (rects)) * 24) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRects `plusPtr` (24 * (i)) :: Ptr ClearRect) (e) . ($ ())) (rects)+  lift $ vkCmdClearAttachments' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32)) (pPAttachments) ((fromIntegral (Data.Vector.length $ (rects)) :: Word32)) (pPRects)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdResolveImage+  :: FunPtr (Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()) -> Ptr CommandBuffer_T -> Image -> ImageLayout -> Image -> ImageLayout -> Word32 -> Ptr ImageResolve -> IO ()++-- | vkCmdResolveImage - Resolve regions of an image+--+-- = Description+--+-- During the resolve the samples corresponding to each pixel location in+-- the source are converted to a single sample before being written to the+-- destination. If the source formats are floating-point or normalized+-- types, the sample values for each pixel are resolved in an+-- implementation-dependent manner. If the source formats are integer+-- types, a single sample’s value is selected for each pixel.+--+-- @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets+-- in texels of the sub-regions of the source and destination image data.+-- @extent@ is the size in texels of the source image to resolve in+-- @width@, @height@ and @depth@. Each element of @pRegions@ /must/ be a+-- region that is contained within its corresponding image.+--+-- Resolves are done layer by layer starting with @baseArrayLayer@ member+-- of @srcSubresource@ for the source and @dstSubresource@ for the+-- destination. @layerCount@ layers are resolved to the destination image.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdResolveImage-commandBuffer-01837# If @commandBuffer@ is+--     an unprotected command buffer, then @srcImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdResolveImage-commandBuffer-01838# If @commandBuffer@ is+--     an unprotected command buffer, then @dstImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdResolveImage-commandBuffer-01839# If @commandBuffer@ is a+--     protected command buffer, then @dstImage@ /must/ not be an+--     unprotected image+--+-- -   #VUID-vkCmdResolveImage-pRegions-00255# The union of all source+--     regions, and the union of all destination regions, specified by the+--     elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-vkCmdResolveImage-srcImage-00256# If @srcImage@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdResolveImage-srcImage-00257# @srcImage@ /must/ have a+--     sample count equal to any valid sample count value other than+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-vkCmdResolveImage-dstImage-00258# If @dstImage@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdResolveImage-dstImage-00259# @dstImage@ /must/ have a+--     sample count equal to+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-vkCmdResolveImage-srcImageLayout-00260# @srcImageLayout@+--     /must/ specify the layout of the image subresources of @srcImage@+--     specified in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdResolveImage-srcImageLayout-01400# @srcImageLayout@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   #VUID-vkCmdResolveImage-dstImageLayout-00262# @dstImageLayout@+--     /must/ specify the layout of the image subresources of @dstImage@+--     specified in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-vkCmdResolveImage-dstImageLayout-01401# @dstImageLayout@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   #VUID-vkCmdResolveImage-dstImage-02003# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @dstImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdResolveImage-srcImage-01386# @srcImage@ and @dstImage@+--     /must/ have been created with the same image format+--+-- -   #VUID-vkCmdResolveImage-srcSubresource-01709# The+--     @srcSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- -   #VUID-vkCmdResolveImage-dstSubresource-01710# The+--     @dstSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- -   #VUID-vkCmdResolveImage-srcSubresource-01711# The+--     @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @srcImage@ was created+--+-- -   #VUID-vkCmdResolveImage-dstSubresource-01712# The+--     @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @dstImage@ was created+--+-- -   #VUID-vkCmdResolveImage-dstImage-02546# @dstImage@ and @srcImage@+--     /must/ not have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-vkCmdResolveImage-srcImage-04446# If either @srcImage@ or+--     @dstImage@ are of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+--     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and+--     @srcSubresource.layerCount@ /must/ be @1@+--+-- -   #VUID-vkCmdResolveImage-srcImage-04447# If either @srcImage@ or+--     @dstImage@ are of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+--     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and+--     @dstSubresource.layerCount@ /must/ be @1@+--+-- -   #VUID-vkCmdResolveImage-srcOffset-00269# For each element of+--     @pRegions@, @srcOffset.x@ and (@extent.width@ + @srcOffset.x@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the width of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdResolveImage-srcOffset-00270# For each element of+--     @pRegions@, @srcOffset.y@ and (@extent.height@ + @srcOffset.y@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the height of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdResolveImage-srcImage-00271# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@+--     /must/ be @1@+--+-- -   #VUID-vkCmdResolveImage-srcOffset-00272# For each element of+--     @pRegions@, @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the depth of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-vkCmdResolveImage-srcImage-00273# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/+--     be @1@+--+-- -   #VUID-vkCmdResolveImage-dstOffset-00274# For each element of+--     @pRegions@, @dstOffset.x@ and (@extent.width@ + @dstOffset.x@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the width of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdResolveImage-dstOffset-00275# For each element of+--     @pRegions@, @dstOffset.y@ and (@extent.height@ + @dstOffset.y@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the height of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdResolveImage-dstImage-00276# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@+--     /must/ be @1@+--+-- -   #VUID-vkCmdResolveImage-dstOffset-00277# For each element of+--     @pRegions@, @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the depth of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-vkCmdResolveImage-dstImage-00278# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/+--     be @1@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdResolveImage-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdResolveImage-srcImage-parameter# @srcImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdResolveImage-srcImageLayout-parameter# @srcImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-vkCmdResolveImage-dstImage-parameter# @dstImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-vkCmdResolveImage-dstImageLayout-parameter# @dstImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-vkCmdResolveImage-pRegions-parameter# @pRegions@ /must/ be a+--     valid pointer to an array of @regionCount@ valid 'ImageResolve'+--     structures+--+-- -   #VUID-vkCmdResolveImage-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdResolveImage-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdResolveImage-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- -   #VUID-vkCmdResolveImage-regionCount-arraylength# @regionCount@+--     /must/ be greater than @0@+--+-- -   #VUID-vkCmdResolveImage-commonparent# Each of @commandBuffer@,+--     @dstImage@, and @srcImage@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout', 'ImageResolve'+cmdResolveImage :: forall io+                 . (MonadIO io)+                => -- | @commandBuffer@ is the command buffer into which the command will be+                   -- recorded.+                   CommandBuffer+                -> -- | @srcImage@ is the source image.+                   ("srcImage" ::: Image)+                -> -- | @srcImageLayout@ is the layout of the source image subresources for the+                   -- resolve.+                   ("srcImageLayout" ::: ImageLayout)+                -> -- | @dstImage@ is the destination image.+                   ("dstImage" ::: Image)+                -> -- | @dstImageLayout@ is the layout of the destination image subresources for+                   -- the resolve.+                   ("dstImageLayout" ::: ImageLayout)+                -> -- | @pRegions@ is a pointer to an array of 'ImageResolve' structures+                   -- specifying the regions to resolve.+                   ("regions" ::: Vector ImageResolve)+                -> io ()+cmdResolveImage commandBuffer srcImage srcImageLayout dstImage dstImageLayout regions = liftIO . evalContT $ do+  let vkCmdResolveImagePtr = pVkCmdResolveImage (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdResolveImagePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResolveImage is null" Nothing Nothing+  let vkCmdResolveImage' = mkVkCmdResolveImage vkCmdResolveImagePtr+  pPRegions <- ContT $ allocaBytesAligned @ImageResolve ((Data.Vector.length (regions)) * 68) 4+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions `plusPtr` (68 * (i)) :: Ptr ImageResolve) (e) . ($ ())) (regions)+  lift $ vkCmdResolveImage' (commandBufferHandle (commandBuffer)) (srcImage) (srcImageLayout) (dstImage) (dstImageLayout) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32)) (pPRegions)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetEvent+  :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()++-- | vkCmdSetEvent - Set an event object to signaled state+--+-- = Description+--+-- When 'cmdSetEvent' is submitted to a queue, it defines an execution+-- dependency on commands that were submitted before it, and defines an+-- event signal operation which sets the event to the signaled state.+--+-- The first+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes all commands that occur earlier in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+-- The synchronization scope is limited to operations on the pipeline+-- stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>+-- specified by @stageMask@.+--+-- The second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes only the event signal operation.+--+-- If @event@ is already in the signaled state when 'cmdSetEvent' is+-- executed on the device, then 'cmdSetEvent' has no effect, no event+-- signal operation occurs, and no execution dependency is generated.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdSetEvent-stageMask-04090# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- -   #VUID-vkCmdSetEvent-stageMask-04091# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+--     or+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- -   #VUID-vkCmdSetEvent-stageMask-04092# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- -   #VUID-vkCmdSetEvent-stageMask-04093# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- -   #VUID-vkCmdSetEvent-stageMask-04094# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- -   #VUID-vkCmdSetEvent-stageMask-04095# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdSetEvent-stageMask-04096# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdSetEvent-stageMask-04097# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- -   #VUID-vkCmdSetEvent-stageMask-4098# Any pipeline stage included in+--     @stageMask@ /must/ be supported by the capabilities of the queue+--     family specified by the @queueFamilyIndex@ member of the+--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was+--     used to create the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- -   #VUID-vkCmdSetEvent-stageMask-01149# @stageMask@ /must/ not include+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'+--+-- -   #VUID-vkCmdSetEvent-commandBuffer-01152# @commandBuffer@’s current+--     device mask /must/ include exactly one physical device+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetEvent-commandBuffer-parameter# @commandBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetEvent-event-parameter# @event@ /must/ be a valid+--     'Vulkan.Core10.Handles.Event' handle+--+-- -   #VUID-vkCmdSetEvent-stageMask-parameter# @stageMask@ /must/ be a+--     valid combination of+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+--     values+--+-- -   #VUID-vkCmdSetEvent-stageMask-requiredbitmask# @stageMask@ /must/+--     not be @0@+--+-- -   #VUID-vkCmdSetEvent-commandBuffer-recording# @commandBuffer@ /must/+--     be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetEvent-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdSetEvent-renderpass# This command /must/ only be called+--     outside of a render pass instance+--+-- -   #VUID-vkCmdSetEvent-commonparent# Both of @commandBuffer@, and+--     @event@ /must/ have been created, allocated, or retrieved from the+--     same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'+cmdSetEvent :: forall io+             . (MonadIO io)+            => -- | @commandBuffer@ is the command buffer into which the command is+               -- recorded.+               CommandBuffer+            -> -- | @event@ is the event that will be signaled.+               Event+            -> -- | @stageMask@ specifies the+               -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>+               -- used to determine the first+               -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>.+               ("stageMask" ::: PipelineStageFlags)+            -> io ()+cmdSetEvent commandBuffer event stageMask = liftIO $ do+  let vkCmdSetEventPtr = pVkCmdSetEvent (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdSetEventPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetEvent is null" Nothing Nothing+  let vkCmdSetEvent' = mkVkCmdSetEvent vkCmdSetEventPtr+  vkCmdSetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdResetEvent+  :: FunPtr (Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()) -> Ptr CommandBuffer_T -> Event -> PipelineStageFlags -> IO ()++-- | vkCmdResetEvent - Reset an event object to non-signaled state+--+-- = Description+--+-- When 'cmdResetEvent' is submitted to a queue, it defines an execution+-- dependency on commands that were submitted before it, and defines an+-- event unsignal operation which resets the event to the unsignaled state.+--+-- The first+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes all commands that occur earlier in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+-- The synchronization scope is limited to operations on the pipeline+-- stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>+-- specified by @stageMask@.+--+-- The second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes only the event unsignal operation.+--+-- If @event@ is already in the unsignaled state when 'cmdResetEvent' is+-- executed on the device, then 'cmdResetEvent' has no effect, no event+-- unsignal operation occurs, and no execution dependency is generated.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdResetEvent-stageMask-04090# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- -   #VUID-vkCmdResetEvent-stageMask-04091# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+--     or+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- -   #VUID-vkCmdResetEvent-stageMask-04092# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- -   #VUID-vkCmdResetEvent-stageMask-04093# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- -   #VUID-vkCmdResetEvent-stageMask-04094# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- -   #VUID-vkCmdResetEvent-stageMask-04095# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdResetEvent-stageMask-04096# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdResetEvent-stageMask-04097# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>+--     feature is not enabled, @stageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- -   #VUID-vkCmdResetEvent-stageMask-4098# Any pipeline stage included in+--     @stageMask@ /must/ be supported by the capabilities of the queue+--     family specified by the @queueFamilyIndex@ member of the+--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was+--     used to create the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- -   #VUID-vkCmdResetEvent-stageMask-01153# @stageMask@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'+--+-- -   #VUID-vkCmdResetEvent-event-01156# When this command executes,+--     @event@ /must/ not be waited on by a 'cmdWaitEvents' command that is+--     currently executing+--+-- -   #VUID-vkCmdResetEvent-commandBuffer-01157# @commandBuffer@’s current+--     device mask /must/ include exactly one physical device+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdResetEvent-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdResetEvent-event-parameter# @event@ /must/ be a valid+--     'Vulkan.Core10.Handles.Event' handle+--+-- -   #VUID-vkCmdResetEvent-stageMask-parameter# @stageMask@ /must/ be a+--     valid combination of+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+--     values+--+-- -   #VUID-vkCmdResetEvent-stageMask-requiredbitmask# @stageMask@ /must/+--     not be @0@+--+-- -   #VUID-vkCmdResetEvent-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdResetEvent-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdResetEvent-renderpass# This command /must/ only be called+--     outside of a render pass instance+--+-- -   #VUID-vkCmdResetEvent-commonparent# Both of @commandBuffer@, and+--     @event@ /must/ have been created, allocated, or retrieved from the+--     same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'+cmdResetEvent :: forall io+               . (MonadIO io)+              => -- | @commandBuffer@ is the command buffer into which the command is+                 -- recorded.+                 CommandBuffer+              -> -- | @event@ is the event that will be unsignaled.+                 Event+              -> -- | @stageMask@ is a bitmask of+                 -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                 -- specifying the+                 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>+                 -- used to determine when the @event@ is unsignaled.+                 ("stageMask" ::: PipelineStageFlags)+              -> io ()+cmdResetEvent commandBuffer event stageMask = liftIO $ do+  let vkCmdResetEventPtr = pVkCmdResetEvent (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdResetEventPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetEvent is null" Nothing Nothing+  let vkCmdResetEvent' = mkVkCmdResetEvent vkCmdResetEventPtr+  vkCmdResetEvent' (commandBufferHandle (commandBuffer)) (event) (stageMask)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdWaitEventsUnsafe+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()++foreign import ccall+  "dynamic" mkVkCmdWaitEventsSafe+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()++-- | cmdWaitEvents with selectable safeness+cmdWaitEventsSafeOrUnsafe :: forall io+                           . (MonadIO io)+                          => -- No documentation found for TopLevel ""+                             (FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr Event -> PipelineStageFlags -> PipelineStageFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ())+                          -> -- | @commandBuffer@ is the command buffer into which the command is+                             -- recorded.+                             CommandBuffer+                          -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.+                             ("events" ::: Vector Event)+                          -> -- | @srcStageMask@ is a bitmask of+                             -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                             -- specifying the+                             -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.+                             ("srcStageMask" ::: PipelineStageFlags)+                          -> -- | @dstStageMask@ is a bitmask of+                             -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                             -- specifying the+                             -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.+                             ("dstStageMask" ::: PipelineStageFlags)+                          -> -- | @pMemoryBarriers@ is a pointer to an array of+                             -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.+                             ("memoryBarriers" ::: Vector MemoryBarrier)+                          -> -- | @pBufferMemoryBarriers@ is a pointer to an array of+                             -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.+                             ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)+                          -> -- | @pImageMemoryBarriers@ is a pointer to an array of+                             -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.+                             ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))+                          -> io ()+cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEvents commandBuffer events srcStageMask dstStageMask memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do+  let vkCmdWaitEventsPtr = pVkCmdWaitEvents (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdWaitEventsPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWaitEvents is null" Nothing Nothing+  let vkCmdWaitEvents' = mkVkCmdWaitEvents vkCmdWaitEventsPtr+  pPEvents <- ContT $ allocaBytesAligned @Event ((Data.Vector.length (events)) * 8) 8+  lift $ Data.Vector.imapM_ (\i e -> poke (pPEvents `plusPtr` (8 * (i)) :: Ptr Event) (e)) (events)+  pPMemoryBarriers <- ContT $ allocaBytesAligned @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e) . ($ ())) (memoryBarriers)+  pPBufferMemoryBarriers <- ContT $ allocaBytesAligned @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e) . ($ ())) (bufferMemoryBarriers)+  pPImageMemoryBarriers <- ContT $ allocaBytesAligned @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)+  lift $ vkCmdWaitEvents' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (events)) :: Word32)) (pPEvents) (srcStageMask) (dstStageMask) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (forgetExtensions (pPImageMemoryBarriers))+  pure $ ()++-- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory+--+-- = Description+--+-- When 'cmdWaitEvents' is submitted to a queue, it defines a memory+-- dependency between prior event signal operations on the same queue or+-- the host, and subsequent commands. 'cmdWaitEvents' /must/ not be used to+-- wait on event signal operations occurring on other queues.+--+-- The first synchronization scope only includes event signal operations+-- that operate on members of @pEvents@, and the operations that+-- happened-before the event signal operations. Event signal operations+-- performed by 'cmdSetEvent' that occur earlier in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>+-- are included in the first synchronization scope, if the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>+-- pipeline stage in their @stageMask@ parameter is+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earlier>+-- than or equal to the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>+-- pipeline stage in @srcStageMask@. Event signal operations performed by+-- 'Vulkan.Core10.Event.setEvent' are only included in the first+-- synchronization scope if+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT' is+-- included in @srcStageMask@.+--+-- The second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes all commands that occur later in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+-- The second synchronization scope is limited to operations on the+-- pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>+-- specified by @dstStageMask@.+--+-- The first+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>+-- is limited to access in the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>+-- specified by @srcStageMask@. Within that, the first access scope only+-- includes the first access scopes defined by elements of the+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@+-- arrays, which each define a set of+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.+-- If no memory barriers are specified, then the first access scope+-- includes no accesses.+--+-- The second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>+-- is limited to access in the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>+-- specified by @dstStageMask@. Within that, the second access scope only+-- includes the second access scopes defined by elements of the+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@+-- arrays, which each define a set of+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.+-- If no memory barriers are specified, then the second access scope+-- includes no accesses.+--+-- Note+--+-- 'cmdWaitEvents' is used with 'cmdSetEvent' to define a memory dependency+-- between two sets of action commands, roughly in the same way as pipeline+-- barriers, but split into two commands such that work between the two+-- /may/ execute unhindered.+--+-- Unlike 'cmdPipelineBarrier', a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer>+-- /cannot/ be performed using 'cmdWaitEvents'.+--+-- Note+--+-- Applications /should/ be careful to avoid race conditions when using+-- events. There is no direct ordering guarantee between a 'cmdResetEvent'+-- command and a 'cmdWaitEvents' command submitted after it. Another+-- execution dependency (e.g. a pipeline barrier or semaphore with+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ALL_COMMANDS_BIT')+-- is needed to prevent such a race condition.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-04090# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-04091# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+--     or+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-04092# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-04093# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-04094# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-04095# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-04096# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-04097# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-4098# Any pipeline stage included+--     in @srcStageMask@ /must/ be supported by the capabilities of the+--     queue family specified by the @queueFamilyIndex@ member of the+--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was+--     used to create the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-04090# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-04091# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+--     or+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-04092# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-04093# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-04094# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-04095# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-04096# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-04097# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-4098# Any pipeline stage included+--     in @dstStageMask@ /must/ be supported by the capabilities of the+--     queue family specified by the @queueFamilyIndex@ member of the+--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that was+--     used to create the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- -   #VUID-vkCmdWaitEvents-srcAccessMask-02815# The @srcAccessMask@+--     member of each element of @pMemoryBarriers@ /must/ only include+--     access flags that are supported by one or more of the pipeline+--     stages in @srcStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdWaitEvents-dstAccessMask-02816# The @dstAccessMask@+--     member of each element of @pMemoryBarriers@ /must/ only include+--     access flags that are supported by one or more of the pipeline+--     stages in @dstStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02817# For any element+--     of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and+--     @dstQueueFamilyIndex@ members are equal, or if its+--     @srcQueueFamilyIndex@ is the queue family index that was used to+--     create the command pool that @commandBuffer@ was allocated from,+--     then its @srcAccessMask@ member /must/ only contain access flags+--     that are supported by one or more of the pipeline stages in+--     @srcStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-02818# For any element+--     of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and+--     @dstQueueFamilyIndex@ members are equal, or if its+--     @dstQueueFamilyIndex@ is the queue family index that was used to+--     create the command pool that @commandBuffer@ was allocated from,+--     then its @dstAccessMask@ member /must/ only contain access flags+--     that are supported by one or more of the pipeline stages in+--     @dstStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdWaitEvents-pImageMemoryBarriers-02819# For any element of+--     @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and+--     @dstQueueFamilyIndex@ members are equal, or if its+--     @srcQueueFamilyIndex@ is the queue family index that was used to+--     create the command pool that @commandBuffer@ was allocated from,+--     then its @srcAccessMask@ member /must/ only contain access flags+--     that are supported by one or more of the pipeline stages in+--     @srcStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdWaitEvents-pImageMemoryBarriers-02820# For any element of+--     @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and+--     @dstQueueFamilyIndex@ members are equal, or if its+--     @dstQueueFamilyIndex@ is the queue family index that was used to+--     create the command pool that @commandBuffer@ was allocated from,+--     then its @dstAccessMask@ member /must/ only contain access flags+--     that are supported by one or more of the pipeline stages in+--     @dstStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-01158# @srcStageMask@ /must/ be+--     the bitwise OR of the @stageMask@ parameter used in previous calls+--     to 'cmdSetEvent' with any of the members of @pEvents@ and+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT'+--     if any of the members of @pEvents@ was set using+--     'Vulkan.Core10.Event.setEvent'+--+-- -   #VUID-vkCmdWaitEvents-pEvents-01163# If @pEvents@ includes one or+--     more events that will be signaled by 'Vulkan.Core10.Event.setEvent'+--     after @commandBuffer@ has been submitted to a queue, then+--     'cmdWaitEvents' /must/ not be called inside a render pass instance+--+-- -   #VUID-vkCmdWaitEvents-srcQueueFamilyIndex-02803# The+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any+--     element of @pBufferMemoryBarriers@ or @pImageMemoryBarriers@ /must/+--     be equal+--+-- -   #VUID-vkCmdWaitEvents-commandBuffer-01167# @commandBuffer@’s current+--     device mask /must/ include exactly one physical device+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdWaitEvents-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdWaitEvents-pEvents-parameter# @pEvents@ /must/ be a valid+--     pointer to an array of @eventCount@ valid+--     'Vulkan.Core10.Handles.Event' handles+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-parameter# @srcStageMask@ /must/+--     be a valid combination of+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+--     values+--+-- -   #VUID-vkCmdWaitEvents-srcStageMask-requiredbitmask# @srcStageMask@+--     /must/ not be @0@+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-parameter# @dstStageMask@ /must/+--     be a valid combination of+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+--     values+--+-- -   #VUID-vkCmdWaitEvents-dstStageMask-requiredbitmask# @dstStageMask@+--     /must/ not be @0@+--+-- -   #VUID-vkCmdWaitEvents-pMemoryBarriers-parameter# If+--     @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a valid+--     pointer to an array of @memoryBarrierCount@ valid+--     'Vulkan.Core10.OtherTypes.MemoryBarrier' structures+--+-- -   #VUID-vkCmdWaitEvents-pBufferMemoryBarriers-parameter# If+--     @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@+--     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@+--     valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures+--+-- -   #VUID-vkCmdWaitEvents-pImageMemoryBarriers-parameter# If+--     @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@ /must/+--     be a valid pointer to an array of @imageMemoryBarrierCount@ valid+--     'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures+--+-- -   #VUID-vkCmdWaitEvents-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdWaitEvents-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdWaitEvents-eventCount-arraylength# @eventCount@ /must/ be+--     greater than @0@+--+-- -   #VUID-vkCmdWaitEvents-commonparent# Both of @commandBuffer@, and the+--     elements of @pEvents@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Event',+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'+cmdWaitEvents :: forall io+               . (MonadIO io)+              => -- | @commandBuffer@ is the command buffer into which the command is+                 -- recorded.+                 CommandBuffer+              -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.+                 ("events" ::: Vector Event)+              -> -- | @srcStageMask@ is a bitmask of+                 -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                 -- specifying the+                 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.+                 ("srcStageMask" ::: PipelineStageFlags)+              -> -- | @dstStageMask@ is a bitmask of+                 -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                 -- specifying the+                 -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.+                 ("dstStageMask" ::: PipelineStageFlags)+              -> -- | @pMemoryBarriers@ is a pointer to an array of+                 -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.+                 ("memoryBarriers" ::: Vector MemoryBarrier)+              -> -- | @pBufferMemoryBarriers@ is a pointer to an array of+                 -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.+                 ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)+              -> -- | @pImageMemoryBarriers@ is a pointer to an array of+                 -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.+                 ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))+              -> io ()+cmdWaitEvents = cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEventsUnsafe++-- | A variant of 'cmdWaitEvents' which makes a *safe* FFI call+cmdWaitEventsSafe :: forall io+                   . (MonadIO io)+                  => -- | @commandBuffer@ is the command buffer into which the command is+                     -- recorded.+                     CommandBuffer+                  -> -- | @pEvents@ is a pointer to an array of event object handles to wait on.+                     ("events" ::: Vector Event)+                  -> -- | @srcStageMask@ is a bitmask of+                     -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                     -- specifying the+                     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages source stage mask>.+                     ("srcStageMask" ::: PipelineStageFlags)+                  -> -- | @dstStageMask@ is a bitmask of+                     -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                     -- specifying the+                     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages destination stage mask>.+                     ("dstStageMask" ::: PipelineStageFlags)+                  -> -- | @pMemoryBarriers@ is a pointer to an array of+                     -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.+                     ("memoryBarriers" ::: Vector MemoryBarrier)+                  -> -- | @pBufferMemoryBarriers@ is a pointer to an array of+                     -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.+                     ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)+                  -> -- | @pImageMemoryBarriers@ is a pointer to an array of+                     -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.+                     ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))+                  -> io ()+cmdWaitEventsSafe = cmdWaitEventsSafeOrUnsafe mkVkCmdWaitEventsSafe+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdPipelineBarrier+  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlags -> PipelineStageFlags -> DependencyFlags -> Word32 -> Ptr MemoryBarrier -> Word32 -> Ptr BufferMemoryBarrier -> Word32 -> Ptr (SomeStruct ImageMemoryBarrier) -> IO ()++-- | vkCmdPipelineBarrier - Insert a memory dependency+--+-- = Description+--+-- When 'cmdPipelineBarrier' is submitted to a queue, it defines a memory+-- dependency between commands that were submitted before it, and those+-- submitted after it.+--+-- If 'cmdPipelineBarrier' was recorded outside a render pass instance, the+-- first+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes all commands that occur earlier in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+-- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the+-- first synchronization scope includes only commands that occur earlier in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>+-- within the same subpass. In either case, the first synchronization scope+-- is limited to operations on the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>+-- specified by @srcStageMask@.+--+-- If 'cmdPipelineBarrier' was recorded outside a render pass instance, the+-- second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scope>+-- includes all commands that occur later in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>.+-- If 'cmdPipelineBarrier' was recorded inside a render pass instance, the+-- second synchronization scope includes only commands that occur later in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-submission-order submission order>+-- within the same subpass. In either case, the second synchronization+-- scope is limited to operations on the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>+-- specified by @dstStageMask@.+--+-- The first+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>+-- is limited to access in the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>+-- specified by @srcStageMask@. Within that, the first access scope only+-- includes the first access scopes defined by elements of the+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@+-- arrays, which each define a set of+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.+-- If no memory barriers are specified, then the first access scope+-- includes no accesses.+--+-- The second+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scope>+-- is limited to access in the pipeline stages determined by the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>+-- specified by @dstStageMask@. Within that, the second access scope only+-- includes the second access scopes defined by elements of the+-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@+-- arrays, which each define a set of+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-memory-barriers memory barriers>.+-- If no memory barriers are specified, then the second access scope+-- includes no accesses.+--+-- If @dependencyFlags@ includes+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT', then+-- any dependency between+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space>+-- pipeline stages is+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-local>+-- - otherwise it is+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-global>.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-04090# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-04091# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+--     or+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-04092# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-04093# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-04094# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-04095# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-04096# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-04097# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>+--     feature is not enabled, @srcStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-4098# Any pipeline stage+--     included in @srcStageMask@ /must/ be supported by the capabilities+--     of the queue family specified by the @queueFamilyIndex@ member of+--     the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that+--     was used to create the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-04090# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-04091# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+--     or+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-04092# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-04093# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-04094# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-04095# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-04096# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-04097# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>+--     feature is not enabled, @dstStageMask@ /must/ not contain+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-4098# Any pipeline stage+--     included in @dstStageMask@ /must/ be supported by the capabilities+--     of the queue family specified by the @queueFamilyIndex@ member of+--     the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' structure that+--     was used to create the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages>+--+-- -   #VUID-vkCmdPipelineBarrier-srcAccessMask-02815# The @srcAccessMask@+--     member of each element of @pMemoryBarriers@ /must/ only include+--     access flags that are supported by one or more of the pipeline+--     stages in @srcStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdPipelineBarrier-dstAccessMask-02816# The @dstAccessMask@+--     member of each element of @pMemoryBarriers@ /must/ only include+--     access flags that are supported by one or more of the pipeline+--     stages in @dstStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02817# For any+--     element of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and+--     @dstQueueFamilyIndex@ members are equal, or if its+--     @srcQueueFamilyIndex@ is the queue family index that was used to+--     create the command pool that @commandBuffer@ was allocated from,+--     then its @srcAccessMask@ member /must/ only contain access flags+--     that are supported by one or more of the pipeline stages in+--     @srcStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-02818# For any+--     element of @pBufferMemoryBarriers@, if its @srcQueueFamilyIndex@ and+--     @dstQueueFamilyIndex@ members are equal, or if its+--     @dstQueueFamilyIndex@ is the queue family index that was used to+--     create the command pool that @commandBuffer@ was allocated from,+--     then its @dstAccessMask@ member /must/ only contain access flags+--     that are supported by one or more of the pipeline stages in+--     @dstStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02819# For any+--     element of @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and+--     @dstQueueFamilyIndex@ members are equal, or if its+--     @srcQueueFamilyIndex@ is the queue family index that was used to+--     create the command pool that @commandBuffer@ was allocated from,+--     then its @srcAccessMask@ member /must/ only contain access flags+--     that are supported by one or more of the pipeline stages in+--     @srcStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-02820# For any+--     element of @pImageMemoryBarriers@, if its @srcQueueFamilyIndex@ and+--     @dstQueueFamilyIndex@ members are equal, or if its+--     @dstQueueFamilyIndex@ is the queue family index that was used to+--     create the command pool that @commandBuffer@ was allocated from,+--     then its @dstAccessMask@ member /must/ only contain access flags+--     that are supported by one or more of the pipeline stages in+--     @dstStageMask@, as specified in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types>+--+-- -   #VUID-vkCmdPipelineBarrier-pDependencies-02285# If+--     'cmdPipelineBarrier' is called within a render pass instance, the+--     render pass /must/ have been created with at least one+--     'Vulkan.Core10.Pass.SubpassDependency' instance in+--     'Vulkan.Core10.Pass.RenderPassCreateInfo'::@pDependencies@ that+--     expresses a dependency from the current subpass to itself, with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-scopes synchronization scopes>+--     and+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies-access-scopes access scopes>+--     that are all supersets of the scopes defined in this command+--+-- -   #VUID-vkCmdPipelineBarrier-bufferMemoryBarrierCount-01178# If+--     'cmdPipelineBarrier' is called within a render pass instance, it+--     /must/ not include any buffer memory barriers+--+-- -   #VUID-vkCmdPipelineBarrier-image-04073# If 'cmdPipelineBarrier' is+--     called within a render pass instance, the @image@ member of any+--     image memory barrier included in this command /must/ be an+--     attachment used in the current subpass both as an input attachment,+--     and as either a color or depth\/stencil attachment+--+-- -   #VUID-vkCmdPipelineBarrier-oldLayout-01181# If 'cmdPipelineBarrier'+--     is called within a render pass instance, the @oldLayout@ and+--     @newLayout@ members of any image memory barrier included in this+--     command /must/ be equal+--+-- -   #VUID-vkCmdPipelineBarrier-srcQueueFamilyIndex-01182# If+--     'cmdPipelineBarrier' is called within a render pass instance, the+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any image+--     memory barrier included in this command /must/ be equal+--+-- -   #VUID-vkCmdPipelineBarrier-dependencyFlags-01186# If+--     'cmdPipelineBarrier' is called outside of a render pass instance,+--     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT'+--     /must/ not be included in the dependency flags+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdPipelineBarrier-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-parameter# @srcStageMask@+--     /must/ be a valid combination of+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+--     values+--+-- -   #VUID-vkCmdPipelineBarrier-srcStageMask-requiredbitmask#+--     @srcStageMask@ /must/ not be @0@+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-parameter# @dstStageMask@+--     /must/ be a valid combination of+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+--     values+--+-- -   #VUID-vkCmdPipelineBarrier-dstStageMask-requiredbitmask#+--     @dstStageMask@ /must/ not be @0@+--+-- -   #VUID-vkCmdPipelineBarrier-dependencyFlags-parameter#+--     @dependencyFlags@ /must/ be a valid combination of+--     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values+--+-- -   #VUID-vkCmdPipelineBarrier-pMemoryBarriers-parameter# If+--     @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a valid+--     pointer to an array of @memoryBarrierCount@ valid+--     'Vulkan.Core10.OtherTypes.MemoryBarrier' structures+--+-- -   #VUID-vkCmdPipelineBarrier-pBufferMemoryBarriers-parameter# If+--     @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@+--     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@+--     valid 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures+--+-- -   #VUID-vkCmdPipelineBarrier-pImageMemoryBarriers-parameter# If+--     @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@ /must/+--     be a valid pointer to an array of @imageMemoryBarrierCount@ valid+--     'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures+--+-- -   #VUID-vkCmdPipelineBarrier-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdPipelineBarrier-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier',+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlags',+-- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier',+-- 'Vulkan.Core10.OtherTypes.MemoryBarrier',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlags'+cmdPipelineBarrier :: forall io+                    . (MonadIO io)+                   => -- | @commandBuffer@ is the command buffer into which the command is+                      -- recorded.+                      CommandBuffer+                   -> -- | @srcStageMask@ is a bitmask of+                      -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                      -- specifying the+                      -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks source stage mask>.+                      ("srcStageMask" ::: PipelineStageFlags)+                   -> -- | @dstStageMask@ is a bitmask of+                      -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+                      -- specifying the+                      -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-masks destination stage mask>.+                      ("dstStageMask" ::: PipelineStageFlags)+                   -> -- | @dependencyFlags@ is a bitmask of+                      -- 'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' specifying+                      -- how execution and memory dependencies are formed.+                      DependencyFlags+                   -> -- | @pMemoryBarriers@ is a pointer to an array of+                      -- 'Vulkan.Core10.OtherTypes.MemoryBarrier' structures.+                      ("memoryBarriers" ::: Vector MemoryBarrier)+                   -> -- | @pBufferMemoryBarriers@ is a pointer to an array of+                      -- 'Vulkan.Core10.OtherTypes.BufferMemoryBarrier' structures.+                      ("bufferMemoryBarriers" ::: Vector BufferMemoryBarrier)+                   -> -- | @pImageMemoryBarriers@ is a pointer to an array of+                      -- 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' structures.+                      ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier))+                   -> io ()+cmdPipelineBarrier commandBuffer srcStageMask dstStageMask dependencyFlags memoryBarriers bufferMemoryBarriers imageMemoryBarriers = liftIO . evalContT $ do+  let vkCmdPipelineBarrierPtr = pVkCmdPipelineBarrier (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdPipelineBarrierPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPipelineBarrier is null" Nothing Nothing+  let vkCmdPipelineBarrier' = mkVkCmdPipelineBarrier vkCmdPipelineBarrierPtr+  pPMemoryBarriers <- ContT $ allocaBytesAligned @MemoryBarrier ((Data.Vector.length (memoryBarriers)) * 24) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMemoryBarriers `plusPtr` (24 * (i)) :: Ptr MemoryBarrier) (e) . ($ ())) (memoryBarriers)+  pPBufferMemoryBarriers <- ContT $ allocaBytesAligned @BufferMemoryBarrier ((Data.Vector.length (bufferMemoryBarriers)) * 56) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBufferMemoryBarriers `plusPtr` (56 * (i)) :: Ptr BufferMemoryBarrier) (e) . ($ ())) (bufferMemoryBarriers)+  pPImageMemoryBarriers <- ContT $ allocaBytesAligned @(ImageMemoryBarrier _) ((Data.Vector.length (imageMemoryBarriers)) * 72) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPImageMemoryBarriers `plusPtr` (72 * (i)) :: Ptr (ImageMemoryBarrier _))) (e) . ($ ())) (imageMemoryBarriers)+  lift $ vkCmdPipelineBarrier' (commandBufferHandle (commandBuffer)) (srcStageMask) (dstStageMask) (dependencyFlags) ((fromIntegral (Data.Vector.length $ (memoryBarriers)) :: Word32)) (pPMemoryBarriers) ((fromIntegral (Data.Vector.length $ (bufferMemoryBarriers)) :: Word32)) (pPBufferMemoryBarriers) ((fromIntegral (Data.Vector.length $ (imageMemoryBarriers)) :: Word32)) (forgetExtensions (pPImageMemoryBarriers))+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBeginQuery+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> QueryControlFlags -> IO ()++-- | vkCmdBeginQuery - Begin a query+--+-- = Description+--+-- If the @queryType@ of the pool is+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' and @flags@+-- contains+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT', an+-- implementation /must/ return a result that matches the actual number of+-- samples passed. This is described in more detail in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-occlusion Occlusion Queries>.+--+-- Calling 'cmdBeginQuery' is equivalent to calling+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginQueryIndexedEXT'+-- with the @index@ parameter set to zero.+--+-- After beginning a query, that query is considered /active/ within the+-- command buffer it was called in until that same query is ended. Queries+-- active in a primary command buffer when secondary command buffers are+-- executed are considered active for those secondary command buffers.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBeginQuery-queryPool-01922# @queryPool@ /must/ have been+--     created with a @queryType@ that differs from that of any queries+--     that are+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>+--     within @commandBuffer@+--+-- -   #VUID-vkCmdBeginQuery-None-00807# All queries used by the command+--     /must/ be unavailable+--+-- -   #VUID-vkCmdBeginQuery-queryType-02804# The @queryType@ used to+--     create @queryPool@ /must/ not be+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'+--+-- -   #VUID-vkCmdBeginQuery-queryType-00800# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries>+--     feature is not enabled, or the @queryType@ used to create+--     @queryPool@ was not+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', @flags@ /must/+--     not contain+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT'+--+-- -   #VUID-vkCmdBeginQuery-query-00802# @query@ /must/ be less than the+--     number of queries in @queryPool@+--+-- -   #VUID-vkCmdBeginQuery-queryType-00803# If the @queryType@ used to+--     create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBeginQuery-queryType-00804# If the @queryType@ used to+--     create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and+--     any of the @pipelineStatistics@ indicate graphics operations, the+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBeginQuery-queryType-00805# If the @queryType@ used to+--     create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and+--     any of the @pipelineStatistics@ indicate compute operations, the+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdBeginQuery-commandBuffer-01885# @commandBuffer@ /must/+--     not be a protected command buffer+--+-- -   #VUID-vkCmdBeginQuery-query-00808# If called within a render pass+--     instance, the sum of @query@ and the number of bits set in the+--     current subpass’s view mask /must/ be less than or equal to the+--     number of queries in @queryPool@+--+-- -   #VUID-vkCmdBeginQuery-queryType-02327# If the @queryType@ used to+--     create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'+--     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBeginQuery-queryType-02328# If the @queryType@ used to+--     create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'+--     then+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@+--     /must/ be supported+--+-- -   #VUID-vkCmdBeginQuery-queryPool-03223# If @queryPool@ was created+--     with a @queryType@ of+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>+--     /must/ have been held before+--     'Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called on+--     @commandBuffer@+--+-- -   #VUID-vkCmdBeginQuery-queryPool-03224# If @queryPool@ was created+--     with a @queryType@ of+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+--     one of the counters used to create @queryPool@ was+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',+--     the query begin /must/ be the first recorded command in+--     @commandBuffer@+--+-- -   #VUID-vkCmdBeginQuery-queryPool-03225# If @queryPool@ was created+--     with a @queryType@ of+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+--     one of the counters used to create @queryPool@ was+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',+--     the begin command /must/ not be recorded within a render pass+--     instance+--+-- -   #VUID-vkCmdBeginQuery-queryPool-03226# If @queryPool@ was created+--     with a @queryType@ of+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+--     another query pool with a @queryType@+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' has+--     been used within @commandBuffer@, its parent primary command buffer+--     or secondary command buffer recorded within the same parent primary+--     command buffer as @commandBuffer@, the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools>+--     feature /must/ be enabled+--+-- -   #VUID-vkCmdBeginQuery-None-02863# If @queryPool@ was created with a+--     @queryType@ of+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+--     this command /must/ not be recorded in a command buffer that, either+--     directly or through secondary command buffers, also contains a+--     'cmdResetQueryPool' command affecting the same query+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBeginQuery-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBeginQuery-queryPool-parameter# @queryPool@ /must/ be a+--     valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- -   #VUID-vkCmdBeginQuery-flags-parameter# @flags@ /must/ be a valid+--     combination of+--     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'+--     values+--+-- -   #VUID-vkCmdBeginQuery-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBeginQuery-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdBeginQuery-commonparent# Both of @commandBuffer@, and+--     @queryPool@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlags',+-- 'Vulkan.Core10.Handles.QueryPool'+cmdBeginQuery :: forall io+               . (MonadIO io)+              => -- | @commandBuffer@ is the command buffer into which this command will be+                 -- recorded.+                 CommandBuffer+              -> -- | @queryPool@ is the query pool that will manage the results of the query.+                 QueryPool+              -> -- | @query@ is the query index within the query pool that will contain the+                 -- results.+                 ("query" ::: Word32)+              -> -- | @flags@ is a bitmask of+                 -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits'+                 -- specifying constraints on the types of queries that /can/ be performed.+                 QueryControlFlags+              -> io ()+cmdBeginQuery commandBuffer queryPool query flags = liftIO $ do+  let vkCmdBeginQueryPtr = pVkCmdBeginQuery (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdBeginQueryPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginQuery is null" Nothing Nothing+  let vkCmdBeginQuery' = mkVkCmdBeginQuery vkCmdBeginQueryPtr+  vkCmdBeginQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query) (flags)+  pure $ ()++-- | This function will call the supplied action between calls to+-- 'cmdBeginQuery' and 'cmdEndQuery'+--+-- Note that 'cmdEndQuery' is *not* called if an exception is thrown by the+-- inner action.+cmdUseQuery :: forall io r . MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> io r -> io r+cmdUseQuery commandBuffer queryPool query flags a =+  (cmdBeginQuery commandBuffer queryPool query flags) *> a <* (cmdEndQuery commandBuffer queryPool query)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdEndQuery+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> IO ()++-- | vkCmdEndQuery - Ends a query+--+-- = Description+--+-- Calling 'cmdEndQuery' is equivalent to calling+-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndQueryIndexedEXT' with+-- the @index@ parameter set to zero.+--+-- As queries operate asynchronously, ending a query does not immediately+-- set the query’s status to available. A query is considered /finished/+-- when the final results of the query are ready to be retrieved by+-- 'Vulkan.Core10.Query.getQueryPoolResults' and 'cmdCopyQueryPoolResults',+-- and this is when the query’s status is set to available.+--+-- Once a query is ended the query /must/ finish in finite time, unless the+-- state of the query is changed using other commands, e.g. by issuing a+-- reset of the query.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdEndQuery-None-01923# All queries used by the command+--     /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>+--+-- -   #VUID-vkCmdEndQuery-query-00810# @query@ /must/ be less than the+--     number of queries in @queryPool@+--+-- -   #VUID-vkCmdEndQuery-commandBuffer-01886# @commandBuffer@ /must/ not+--     be a protected command buffer+--+-- -   #VUID-vkCmdEndQuery-query-00812# If 'cmdEndQuery' is called within a+--     render pass instance, the sum of @query@ and the number of bits set+--     in the current subpass’s view mask /must/ be less than or equal to+--     the number of queries in @queryPool@+--+-- -   #VUID-vkCmdEndQuery-queryPool-03227# If @queryPool@ was created with+--     a @queryType@ of+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+--     one or more of the counters used to create @queryPool@ was+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR',+--     the 'cmdEndQuery' /must/ be the last recorded command in+--     @commandBuffer@+--+-- -   #VUID-vkCmdEndQuery-queryPool-03228# If @queryPool@ was created with+--     a @queryType@ of+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and+--     one or more of the counters used to create @queryPool@ was+--     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR',+--     the 'cmdEndQuery' /must/ not be recorded within a render pass+--     instance+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdEndQuery-commandBuffer-parameter# @commandBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdEndQuery-queryPool-parameter# @queryPool@ /must/ be a+--     valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- -   #VUID-vkCmdEndQuery-commandBuffer-recording# @commandBuffer@ /must/+--     be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdEndQuery-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdEndQuery-commonparent# Both of @commandBuffer@, and+--     @queryPool@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'+cmdEndQuery :: forall io+             . (MonadIO io)+            => -- | @commandBuffer@ is the command buffer into which this command will be+               -- recorded.+               CommandBuffer+            -> -- | @queryPool@ is the query pool that is managing the results of the query.+               QueryPool+            -> -- | @query@ is the query index within the query pool where the result is+               -- stored.+               ("query" ::: Word32)+            -> io ()+cmdEndQuery commandBuffer queryPool query = liftIO $ do+  let vkCmdEndQueryPtr = pVkCmdEndQuery (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdEndQueryPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndQuery is null" Nothing Nothing+  let vkCmdEndQuery' = mkVkCmdEndQuery vkCmdEndQueryPtr+  vkCmdEndQuery' (commandBufferHandle (commandBuffer)) (queryPool) (query)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdResetQueryPool+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> IO ()++-- | vkCmdResetQueryPool - Reset queries in a query pool+--+-- = Description+--+-- When executed on a queue, this command sets the status of query indices+-- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.+--+-- If the @queryType@ used to create @queryPool@ was+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', this+-- command sets the status of query indices [@firstQuery@, @firstQuery@ ++-- @queryCount@ - 1] to unavailable for each pass of @queryPool@, as+-- indicated by a call to+-- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.+--+-- Note+--+-- Because 'cmdResetQueryPool' resets all the passes of the indicated+-- queries, applications must not record a 'cmdResetQueryPool' command for+-- a @queryPool@ created with+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' in a+-- command buffer that needs to be submitted multiple times as indicated by+-- a call to+-- 'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'.+-- Otherwise applications will never be able to complete the recorded+-- queries.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdResetQueryPool-firstQuery-00796# @firstQuery@ /must/ be+--     less than the number of queries in @queryPool@+--+-- -   #VUID-vkCmdResetQueryPool-firstQuery-00797# The sum of @firstQuery@+--     and @queryCount@ /must/ be less than or equal to the number of+--     queries in @queryPool@+--+-- -   #VUID-vkCmdResetQueryPool-None-02841# All queries used by the+--     command /must/ not be active+--+-- -   #VUID-vkCmdResetQueryPool-firstQuery-02862# If @queryPool@ was+--     created with+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+--     this command /must/ not be recorded in a command buffer that, either+--     directly or through secondary command buffers, also contains begin+--     commands for a query from the set of queries [@firstQuery@,+--     @firstQuery@ + @queryCount@ - 1]+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdResetQueryPool-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdResetQueryPool-queryPool-parameter# @queryPool@ /must/ be+--     a valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- -   #VUID-vkCmdResetQueryPool-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdResetQueryPool-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdResetQueryPool-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- -   #VUID-vkCmdResetQueryPool-commonparent# Both of @commandBuffer@, and+--     @queryPool@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.QueryPool'+cmdResetQueryPool :: forall io+                   . (MonadIO io)+                  => -- | @commandBuffer@ is the command buffer into which this command will be+                     -- recorded.+                     CommandBuffer+                  -> -- | @queryPool@ is the handle of the query pool managing the queries being+                     -- reset.+                     QueryPool+                  -> -- | @firstQuery@ is the initial query index to reset.+                     ("firstQuery" ::: Word32)+                  -> -- | @queryCount@ is the number of queries to reset.+                     ("queryCount" ::: Word32)+                  -> io ()+cmdResetQueryPool commandBuffer queryPool firstQuery queryCount = liftIO $ do+  let vkCmdResetQueryPoolPtr = pVkCmdResetQueryPool (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdResetQueryPoolPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResetQueryPool is null" Nothing Nothing+  let vkCmdResetQueryPool' = mkVkCmdResetQueryPool vkCmdResetQueryPoolPtr+  vkCmdResetQueryPool' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdWriteTimestamp+  :: FunPtr (Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineStageFlagBits -> QueryPool -> Word32 -> IO ()++-- | vkCmdWriteTimestamp - Write a device timestamp into a query object+--+-- = Description+--+-- 'cmdWriteTimestamp' latches the value of the timer when all previous+-- commands have completed executing as far as the specified pipeline+-- stage, and writes the timestamp value to memory. When the timestamp+-- value is written, the availability status of the query is set to+-- available.+--+-- Note+--+-- If an implementation is unable to detect completion and latch the timer+-- at any specific stage of the pipeline, it /may/ instead do so at any+-- logically later stage.+--+-- Timestamps /may/ only be meaningfully compared if they are written by+-- commands submitted to the same queue.+--+-- Note+--+-- An example of such a comparison is determining the execution time of a+-- sequence of commands.+--+-- If 'cmdWriteTimestamp' is called while executing a render pass instance+-- that has multiview enabled, the timestamp uses N consecutive query+-- indices in the query pool (starting at @query@) where N is the number of+-- bits set in the view mask of the subpass the command is executed in. The+-- resulting query values are determined by an implementation-dependent+-- choice of one of the following behaviors:+--+-- -   The first query is a timestamp value and (if more than one bit is+--     set in the view mask) zero is written to the remaining queries. If+--     two timestamps are written in the same subpass, the sum of the+--     execution time of all views between those commands is the difference+--     between the first query written by each command.+--+-- -   All N queries are timestamp values. If two timestamps are written in+--     the same subpass, the sum of the execution time of all views between+--     those commands is the sum of the difference between corresponding+--     queries written by each command. The difference between+--     corresponding queries /may/ be the execution time of a single view.+--+-- In either case, the application /can/ sum the differences between all N+-- queries to determine the total execution time.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-04074# @pipelineStage@+--     /must/ be a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported valid stage>+--     for the queue family that was used to create the command pool that+--     @commandBuffer@ was allocated from+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-04075# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @pipelineStage@ /must/ not be+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-04076# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @pipelineStage@ /must/ not be+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT'+--     or+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT'+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-04077# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering>+--     feature is not enabled, @pipelineStage@ /must/ not be+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT'+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-04078# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map>+--     feature is not enabled, @pipelineStage@ /must/ not be+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT'+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-04079# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback>+--     feature is not enabled, @pipelineStage@ /must/ not be+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT'+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-04080# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders>+--     feature is not enabled, @pipelineStage@ /must/ not be+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV'+--     or+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV'+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-04081# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image>+--     feature is not enabled, @pipelineStage@ /must/ not be+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV'+--+-- -   #VUID-vkCmdWriteTimestamp-queryPool-01416# @queryPool@ /must/ have+--     been created with a @queryType@ of+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'+--+-- -   #VUID-vkCmdWriteTimestamp-queryPool-00828# The query identified by+--     @queryPool@ and @query@ /must/ be /unavailable/+--+-- -   #VUID-vkCmdWriteTimestamp-timestampValidBits-00829# The command+--     pool’s queue family /must/ support a non-zero @timestampValidBits@+--+-- -   #VUID-vkCmdWriteTimestamp-None-00830# All queries used by the+--     command /must/ be unavailable+--+-- -   #VUID-vkCmdWriteTimestamp-query-00831# If 'cmdWriteTimestamp' is+--     called within a render pass instance, the sum of @query@ and the+--     number of bits set in the current subpass’s view mask /must/ be less+--     than or equal to the number of queries in @queryPool@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdWriteTimestamp-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdWriteTimestamp-pipelineStage-parameter# @pipelineStage@+--     /must/ be a valid+--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits'+--     value+--+-- -   #VUID-vkCmdWriteTimestamp-queryPool-parameter# @queryPool@ /must/ be+--     a valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- -   #VUID-vkCmdWriteTimestamp-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdWriteTimestamp-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdWriteTimestamp-commonparent# Both of @commandBuffer@, and+--     @queryPool@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',+-- 'Vulkan.Core10.Handles.QueryPool'+cmdWriteTimestamp :: forall io+                   . (MonadIO io)+                  => -- | @commandBuffer@ is the command buffer into which the command will be+                     -- recorded.+                     CommandBuffer+                  -> -- | @pipelineStage@ is one of the+                     -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits',+                     -- specifying a stage of the pipeline.+                     PipelineStageFlagBits+                  -> -- | @queryPool@ is the query pool that will manage the timestamp.+                     QueryPool+                  -> -- | @query@ is the query within the query pool that will contain the+                     -- timestamp.+                     ("query" ::: Word32)+                  -> io ()+cmdWriteTimestamp commandBuffer pipelineStage queryPool query = liftIO $ do+  let vkCmdWriteTimestampPtr = pVkCmdWriteTimestamp (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdWriteTimestampPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteTimestamp is null" Nothing Nothing+  let vkCmdWriteTimestamp' = mkVkCmdWriteTimestamp vkCmdWriteTimestampPtr+  vkCmdWriteTimestamp' (commandBufferHandle (commandBuffer)) (pipelineStage) (queryPool) (query)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyQueryPoolResults+  :: FunPtr (Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()) -> Ptr CommandBuffer_T -> QueryPool -> Word32 -> Word32 -> Buffer -> DeviceSize -> DeviceSize -> QueryResultFlags -> IO ()++-- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool+-- to a buffer object+--+-- = Description+--+-- 'cmdCopyQueryPoolResults' is guaranteed to see the effect of previous+-- uses of 'cmdResetQueryPool' in the same queue, without any additional+-- synchronization. Thus, the results will always reflect the most recent+-- use of the query.+--+-- @flags@ has the same possible values described above for the @flags@+-- parameter of 'Vulkan.Core10.Query.getQueryPoolResults', but the+-- different style of execution causes some subtle behavioral differences.+-- Because 'cmdCopyQueryPoolResults' executes in order with respect to+-- other query commands, there is less ambiguity about which use of a query+-- is being requested.+--+-- Results for all requested occlusion queries, pipeline statistics+-- queries, transform feedback queries, and timestamp queries are written+-- as 64-bit unsigned integer values if+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set or+-- 32-bit unsigned integer values otherwise. Performance queries store+-- results in a tightly packed array whose type is determined by the @unit@+-- member of the corresponding+-- 'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterKHR'.+--+-- If neither of+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' and+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'+-- are set, results are only written out for queries in the available+-- state.+--+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is+-- set, the implementation will wait for each query’s status to be in the+-- available state before retrieving the numerical results for that query.+-- This is guaranteed to reflect the most recent use of the query on the+-- same queue, assuming that the query is not being simultaneously used by+-- other queues. If the query does not become available in a finite amount+-- of time (e.g. due to not issuing a query since the last reset), a+-- 'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST' error /may/ occur.+--+-- Similarly, if+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT'+-- is set and+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is not+-- set, the availability is guaranteed to reflect the most recent use of+-- the query on the same queue, assuming that the query is not being+-- simultaneously used by other queues. As with+-- 'Vulkan.Core10.Query.getQueryPoolResults', implementations /must/+-- guarantee that if they return a non-zero availability value, then the+-- numerical results are valid.+--+-- If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT' is+-- set, 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WAIT_BIT' is+-- not set, and the query’s status is unavailable, an intermediate result+-- value between zero and the final result value is written for that query.+--+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'+-- /must/ not be used if the pool’s @queryType@ is+-- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP'.+--+-- 'cmdCopyQueryPoolResults' is considered to be a transfer operation, and+-- its writes to buffer memory /must/ be synchronized using+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFER_BIT'+-- and 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_TRANSFER_WRITE_BIT'+-- before using the results.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyQueryPoolResults-dstOffset-00819# @dstOffset@ /must/+--     be less than the size of @dstBuffer@+--+-- -   #VUID-vkCmdCopyQueryPoolResults-firstQuery-00820# @firstQuery@+--     /must/ be less than the number of queries in @queryPool@+--+-- -   #VUID-vkCmdCopyQueryPoolResults-firstQuery-00821# The sum of+--     @firstQuery@ and @queryCount@ /must/ be less than or equal to the+--     number of queries in @queryPool@+--+-- -   #VUID-vkCmdCopyQueryPoolResults-flags-00822# If+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is not+--     set in @flags@ then @dstOffset@ and @stride@ /must/ be multiples of+--     @4@+--+-- -   #VUID-vkCmdCopyQueryPoolResults-flags-00823# If+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set+--     in @flags@ then @dstOffset@ and @stride@ /must/ be multiples of @8@+--+-- -   #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824# @dstBuffer@ /must/+--     have enough storage, from @dstOffset@, to contain the result of each+--     query, as described+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here>+--+-- -   #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825# @dstBuffer@ /must/+--     have been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826# If @dstBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdCopyQueryPoolResults-queryType-00827# If the @queryType@+--     used to create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP', @flags@ /must/+--     not contain+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'+--+-- -   #VUID-vkCmdCopyQueryPoolResults-queryType-03232# If the @queryType@+--     used to create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+--     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryPropertiesKHR'::@allowCommandBufferQueryCopies@+--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'+--+-- -   #VUID-vkCmdCopyQueryPoolResults-queryType-03233# If the @queryType@+--     used to create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+--     @flags@ /must/ not contain+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT',+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT'+--     or 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT'+--+-- -   #VUID-vkCmdCopyQueryPoolResults-queryType-03234# If the @queryType@+--     used to create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',+--     the @queryPool@ /must/ have been submitted once for each pass as+--     retrieved via a call to+--     'Vulkan.Extensions.VK_KHR_performance_query.getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR'+--+-- -   #VUID-vkCmdCopyQueryPoolResults-queryType-02734#+--     'cmdCopyQueryPoolResults' /must/ not be called if the @queryType@+--     used to create @queryPool@ was+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_INTEL'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyQueryPoolResults-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyQueryPoolResults-queryPool-parameter# @queryPool@+--     /must/ be a valid 'Vulkan.Core10.Handles.QueryPool' handle+--+-- -   #VUID-vkCmdCopyQueryPoolResults-dstBuffer-parameter# @dstBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdCopyQueryPoolResults-flags-parameter# @flags@ /must/ be a+--     valid combination of+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' values+--+-- -   #VUID-vkCmdCopyQueryPoolResults-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyQueryPoolResults-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdCopyQueryPoolResults-renderpass# This command /must/ only+--     be called outside of a render pass instance+--+-- -   #VUID-vkCmdCopyQueryPoolResults-commonparent# Each of+--     @commandBuffer@, @dstBuffer@, and @queryPool@ /must/ have been+--     created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Handles.QueryPool',+-- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlags'+cmdCopyQueryPoolResults :: forall io+                         . (MonadIO io)+                        => -- | @commandBuffer@ is the command buffer into which this command will be+                           -- recorded.+                           CommandBuffer+                        -> -- | @queryPool@ is the query pool managing the queries containing the+                           -- desired results.+                           QueryPool+                        -> -- | @firstQuery@ is the initial query index.+                           ("firstQuery" ::: Word32)+                        -> -- | @queryCount@ is the number of queries. @firstQuery@ and @queryCount@+                           -- together define a range of queries.+                           ("queryCount" ::: Word32)+                        -> -- | @dstBuffer@ is a 'Vulkan.Core10.Handles.Buffer' object that will receive+                           -- the results of the copy command.+                           ("dstBuffer" ::: Buffer)+                        -> -- | @dstOffset@ is an offset into @dstBuffer@.+                           ("dstOffset" ::: DeviceSize)+                        -> -- | @stride@ is the stride in bytes between results for individual queries+                           -- within @dstBuffer@. The required size of the backing memory for+                           -- @dstBuffer@ is determined as described above for+                           -- 'Vulkan.Core10.Query.getQueryPoolResults'.+                           ("stride" ::: DeviceSize)+                        -> -- | @flags@ is a bitmask of+                           -- 'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' specifying+                           -- how and when results are returned.+                           QueryResultFlags+                        -> io ()+cmdCopyQueryPoolResults commandBuffer queryPool firstQuery queryCount dstBuffer dstOffset stride flags = liftIO $ do+  let vkCmdCopyQueryPoolResultsPtr = pVkCmdCopyQueryPoolResults (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdCopyQueryPoolResultsPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyQueryPoolResults is null" Nothing Nothing+  let vkCmdCopyQueryPoolResults' = mkVkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResultsPtr+  vkCmdCopyQueryPoolResults' (commandBufferHandle (commandBuffer)) (queryPool) (firstQuery) (queryCount) (dstBuffer) (dstOffset) (stride) (flags)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdPushConstants+  :: FunPtr (Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()) -> Ptr CommandBuffer_T -> PipelineLayout -> ShaderStageFlags -> Word32 -> Word32 -> Ptr () -> IO ()++-- | vkCmdPushConstants - Update the values of push constants+--+-- = Description+--+-- Note+--+-- As @stageFlags@ needs to include all flags the relevant push constant+-- ranges were created with, any flags that are not supported by the queue+-- family that the 'Vulkan.Core10.Handles.CommandPool' used to allocate+-- @commandBuffer@ was created on are ignored.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdPushConstants-offset-01795# For each byte in the range+--     specified by @offset@ and @size@ and for each shader stage in+--     @stageFlags@, there /must/ be a push constant range in @layout@ that+--     includes that byte and that stage+--+-- -   #VUID-vkCmdPushConstants-offset-01796# For each byte in the range+--     specified by @offset@ and @size@ and for each push constant range+--     that overlaps that byte, @stageFlags@ /must/ include all stages in+--     that push constant range’s+--     'Vulkan.Core10.PipelineLayout.PushConstantRange'::@stageFlags@+--+-- -   #VUID-vkCmdPushConstants-offset-00368# @offset@ /must/ be a multiple+--     of @4@+--+-- -   #VUID-vkCmdPushConstants-size-00369# @size@ /must/ be a multiple of+--     @4@+--+-- -   #VUID-vkCmdPushConstants-offset-00370# @offset@ /must/ be less than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@+--+-- -   #VUID-vkCmdPushConstants-size-00371# @size@ /must/ be less than or+--     equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@+--     minus @offset@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdPushConstants-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdPushConstants-layout-parameter# @layout@ /must/ be a+--     valid 'Vulkan.Core10.Handles.PipelineLayout' handle+--+-- -   #VUID-vkCmdPushConstants-stageFlags-parameter# @stageFlags@ /must/+--     be a valid combination of+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values+--+-- -   #VUID-vkCmdPushConstants-stageFlags-requiredbitmask# @stageFlags@+--     /must/ not be @0@+--+-- -   #VUID-vkCmdPushConstants-pValues-parameter# @pValues@ /must/ be a+--     valid pointer to an array of @size@ bytes+--+-- -   #VUID-vkCmdPushConstants-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdPushConstants-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics, or compute operations+--+-- -   #VUID-vkCmdPushConstants-size-arraylength# @size@ /must/ be greater+--     than @0@+--+-- -   #VUID-vkCmdPushConstants-commonparent# Both of @commandBuffer@, and+--     @layout@ /must/ have been created, allocated, or retrieved from the+--     same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.PipelineLayout',+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'+cmdPushConstants :: forall io+                  . (MonadIO io)+                 => -- | @commandBuffer@ is the command buffer in which the push constant update+                    -- will be recorded.+                    CommandBuffer+                 -> -- | @layout@ is the pipeline layout used to program the push constant+                    -- updates.+                    PipelineLayout+                 -> -- | @stageFlags@ is a bitmask of+                    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' specifying+                    -- the shader stages that will use the push constants in the updated range.+                    ShaderStageFlags+                 -> -- | @offset@ is the start offset of the push constant range to update, in+                    -- units of bytes.+                    ("offset" ::: Word32)+                 -> -- | @size@ is the size of the push constant range to update, in units of+                    -- bytes.+                    ("size" ::: Word32)+                 -> -- | @pValues@ is a pointer to an array of @size@ bytes containing the new+                    -- push constant values.+                    ("values" ::: Ptr ())+                 -> io ()+cmdPushConstants commandBuffer layout stageFlags offset size values = liftIO $ do+  let vkCmdPushConstantsPtr = pVkCmdPushConstants (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdPushConstantsPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdPushConstants is null" Nothing Nothing+  let vkCmdPushConstants' = mkVkCmdPushConstants vkCmdPushConstantsPtr+  vkCmdPushConstants' (commandBufferHandle (commandBuffer)) (layout) (stageFlags) (offset) (size) (values)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBeginRenderPass+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct RenderPassBeginInfo) -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct RenderPassBeginInfo) -> SubpassContents -> IO ()++-- | vkCmdBeginRenderPass - Begin a new render pass+--+-- = Description+--+-- After beginning a render pass instance, the command buffer is ready to+-- record the commands for the first subpass of that render pass.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBeginRenderPass-initialLayout-00895# If any of the+--     @initialLayout@ or @finalLayout@ member of the+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+--     structures specified when creating the render pass specified in the+--     @renderPass@ member of @pRenderPassBegin@ is+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'+--     then the corresponding attachment image view of the framebuffer+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+--     have been created with a @usage@ value including+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-initialLayout-01758# If any of the+--     @initialLayout@ or @finalLayout@ member of the+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+--     structures specified when creating the render pass specified in the+--     @renderPass@ member of @pRenderPassBegin@ is+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',+--     or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'+--     then the corresponding attachment image view of the framebuffer+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+--     have been created with a @usage@ value including+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-initialLayout-02842# If any of the+--     @initialLayout@ or @finalLayout@ member of the+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+--     structures specified when creating the render pass specified in the+--     @renderPass@ member of @pRenderPassBegin@ is+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',+--     or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',+--     or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'+--     then the corresponding attachment image view of the framebuffer+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+--     have been created with a @usage@ value including+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-stencilInitialLayout-02843# If any of the+--     @stencilInitialLayout@ or @stencilFinalLayout@ member of the+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout'+--     structures or the @stencilLayout@ member of the+--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'+--     structures specified when creating the render pass specified in the+--     @renderPass@ member of @pRenderPassBegin@ is+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',+--     or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'+--     then the corresponding attachment image view of the framebuffer+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+--     have been created with a @usage@ value including+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-initialLayout-00897# If any of the+--     @initialLayout@ or @finalLayout@ member of the+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+--     structures specified when creating the render pass specified in the+--     @renderPass@ member of @pRenderPassBegin@ is+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL'+--     then the corresponding attachment image view of the framebuffer+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+--     have been created with a @usage@ value including+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-initialLayout-00898# If any of the+--     @initialLayout@ or @finalLayout@ member of the+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+--     structures specified when creating the render pass specified in the+--     @renderPass@ member of @pRenderPassBegin@ is+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'+--     then the corresponding attachment image view of the framebuffer+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+--     have been created with a @usage@ value including+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-initialLayout-00899# If any of the+--     @initialLayout@ or @finalLayout@ member of the+--     'Vulkan.Core10.Pass.AttachmentDescription' structures or the+--     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference'+--     structures specified when creating the render pass specified in the+--     @renderPass@ member of @pRenderPassBegin@ is+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+--     then the corresponding attachment image view of the framebuffer+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/+--     have been created with a @usage@ value including+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-initialLayout-00900# If any of the+--     @initialLayout@ members of the+--     'Vulkan.Core10.Pass.AttachmentDescription' structures specified when+--     creating the render pass specified in the @renderPass@ member of+--     @pRenderPassBegin@ is not+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', then each+--     such @initialLayout@ /must/ be equal to the current layout of the+--     corresponding attachment image subresource of the framebuffer+--     specified in the @framebuffer@ member of @pRenderPassBegin@+--+-- -   #VUID-vkCmdBeginRenderPass-srcStageMask-00901# The @srcStageMask@+--     and @dstStageMask@ members of any element of the @pDependencies@+--     member of 'Vulkan.Core10.Pass.RenderPassCreateInfo' used to create+--     @renderPass@ /must/ be supported by the capabilities of the queue+--     family identified by the @queueFamilyIndex@ member of the+--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to create the+--     command pool which @commandBuffer@ was allocated from+--+-- -   #VUID-vkCmdBeginRenderPass-framebuffer-02532# For any attachment in+--     @framebuffer@ that is used by @renderPass@ and is bound to memory+--     locations that are also bound to another attachment used by+--     @renderPass@, and if at least one of those uses causes either+--     attachment to be written to, both attachments /must/ have had the+--     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT'+--     set+--+-- -   #VUID-vkCmdBeginRenderPass-pAttachments-04102# Each element of the+--     @pAttachments@ of @framebuffer@ that is referenced by any element of+--     the @pInputAttachments@ of any element of @pSubpasses@ of+--     @renderPass@ /must/ have+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features>+--     containing at least+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'+--     or+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-pAttachments-04103# Each element of the+--     @pAttachments@ of @framebuffer@ that is referenced by any element of+--     the @pColorAttachments@ of any element of @pSubpasses@ of+--     @renderPass@ /must/ have+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features>+--     containing+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-pAttachments-04104# Each element of the+--     @pAttachments@ of @framebuffer@ that is referenced by any element of+--     the @pResolveAttachments@ of any element of @pSubpasses@ of+--     @renderPass@ /must/ have+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features>+--     containing+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'+--+-- -   #VUID-vkCmdBeginRenderPass-pAttachments-04105# Each element of the+--     @pAttachments@ of @framebuffer@ that is referenced by any element of+--     the @pDepthStencilAttachment@ of any element of @pSubpasses@ of+--     @renderPass@ /must/ have+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features>+--     containing+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBeginRenderPass-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBeginRenderPass-pRenderPassBegin-parameter#+--     @pRenderPassBegin@ /must/ be a valid pointer to a valid+--     'RenderPassBeginInfo' structure+--+-- -   #VUID-vkCmdBeginRenderPass-contents-parameter# @contents@ /must/ be+--     a valid 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value+--+-- -   #VUID-vkCmdBeginRenderPass-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBeginRenderPass-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBeginRenderPass-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- -   #VUID-vkCmdBeginRenderPass-bufferlevel# @commandBuffer@ /must/ be a+--     primary 'Vulkan.Core10.Handles.CommandBuffer'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Graphics                                                                                                                            |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'RenderPassBeginInfo',+-- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'+cmdBeginRenderPass :: forall a io+                    . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io)+                   => -- | @commandBuffer@ is the command buffer in which to record the command.+                      CommandBuffer+                   -> -- | @pRenderPassBegin@ is a pointer to a 'RenderPassBeginInfo' structure+                      -- specifying the render pass to begin an instance of, and the framebuffer+                      -- the instance uses.+                      (RenderPassBeginInfo a)+                   -> -- | @contents@ is a 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'+                      -- value specifying how the commands in the first subpass will be provided.+                      SubpassContents+                   -> io ()+cmdBeginRenderPass commandBuffer renderPassBegin contents = liftIO . evalContT $ do+  let vkCmdBeginRenderPassPtr = pVkCmdBeginRenderPass (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdBeginRenderPassPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBeginRenderPass is null" Nothing Nothing+  let vkCmdBeginRenderPass' = mkVkCmdBeginRenderPass vkCmdBeginRenderPassPtr+  pRenderPassBegin <- ContT $ withCStruct (renderPassBegin)+  lift $ vkCmdBeginRenderPass' (commandBufferHandle (commandBuffer)) (forgetExtensions pRenderPassBegin) (contents)+  pure $ ()++-- | This function will call the supplied action between calls to+-- 'cmdBeginRenderPass' and 'cmdEndRenderPass'+--+-- Note that 'cmdEndRenderPass' is *not* called if an exception is thrown+-- by the inner action.+cmdUseRenderPass :: forall a io r . (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r+cmdUseRenderPass commandBuffer pRenderPassBegin contents a =+  (cmdBeginRenderPass commandBuffer pRenderPassBegin contents) *> a <* (cmdEndRenderPass commandBuffer)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdNextSubpass+  :: FunPtr (Ptr CommandBuffer_T -> SubpassContents -> IO ()) -> Ptr CommandBuffer_T -> SubpassContents -> IO ()++-- | vkCmdNextSubpass - Transition to the next subpass of a render pass+--+-- = Description+--+-- The subpass index for a render pass begins at zero when+-- 'cmdBeginRenderPass' is recorded, and increments each time+-- 'cmdNextSubpass' is recorded.+--+-- Moving to the next subpass automatically performs any multisample+-- resolve operations in the subpass being ended. End-of-subpass+-- multisample resolves are treated as color attachment writes for the+-- purposes of synchronization. This applies to resolve operations for both+-- color and depth\/stencil attachments. That is, they are considered to+-- execute in the+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT'+-- pipeline stage and their writes are synchronized with+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COLOR_ATTACHMENT_WRITE_BIT'.+-- Synchronization between rendering within a subpass and any resolve+-- operations at the end of the subpass occurs automatically, without need+-- for explicit dependencies or pipeline barriers. However, if the resolve+-- attachment is also used in a different subpass, an explicit dependency+-- is needed.+--+-- After transitioning to the next subpass, the application /can/ record+-- the commands for that subpass.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdNextSubpass-None-00909# The current subpass index /must/+--     be less than the number of subpasses in the render pass minus one+--+-- -   #VUID-vkCmdNextSubpass-None-02349# This command /must/ not be+--     recorded when transform feedback is active+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdNextSubpass-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdNextSubpass-contents-parameter# @contents@ /must/ be a+--     valid 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value+--+-- -   #VUID-vkCmdNextSubpass-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdNextSubpass-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdNextSubpass-renderpass# This command /must/ only be+--     called inside of a render pass instance+--+-- -   #VUID-vkCmdNextSubpass-bufferlevel# @commandBuffer@ /must/ be a+--     primary 'Vulkan.Core10.Handles.CommandBuffer'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'+cmdNextSubpass :: forall io+                . (MonadIO io)+               => -- | @commandBuffer@ is the command buffer in which to record the command.+                  CommandBuffer+               -> -- | @contents@ specifies how the commands in the next subpass will be+                  -- provided, in the same fashion as the corresponding parameter of+                  -- 'cmdBeginRenderPass'.+                  SubpassContents+               -> io ()+cmdNextSubpass commandBuffer contents = liftIO $ do+  let vkCmdNextSubpassPtr = pVkCmdNextSubpass (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdNextSubpassPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdNextSubpass is null" Nothing Nothing+  let vkCmdNextSubpass' = mkVkCmdNextSubpass vkCmdNextSubpassPtr+  vkCmdNextSubpass' (commandBufferHandle (commandBuffer)) (contents)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdEndRenderPass+  :: FunPtr (Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> IO ()++-- | vkCmdEndRenderPass - End the current render pass+--+-- = Description+--+-- Ending a render pass instance performs any multisample resolve+-- operations on the final subpass.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdEndRenderPass-None-00910# The current subpass index+--     /must/ be equal to the number of subpasses in the render pass minus+--     one+--+-- -   #VUID-vkCmdEndRenderPass-None-02351# This command /must/ not be+--     recorded when transform feedback is active+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdEndRenderPass-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdEndRenderPass-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdEndRenderPass-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdEndRenderPass-renderpass# This command /must/ only be+--     called inside of a render pass instance+--+-- -   #VUID-vkCmdEndRenderPass-bufferlevel# @commandBuffer@ /must/ be a+--     primary 'Vulkan.Core10.Handles.CommandBuffer'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Inside                                                                                                                 | Graphics                                                                                                              | Graphics                                                                                                                            |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdEndRenderPass :: forall io+                  . (MonadIO io)+                 => -- | @commandBuffer@ is the command buffer in which to end the current render+                    -- pass instance.+                    CommandBuffer+                 -> io ()+cmdEndRenderPass commandBuffer = liftIO $ do+  let vkCmdEndRenderPassPtr = pVkCmdEndRenderPass (deviceCmds (commandBuffer :: CommandBuffer))+  unless (vkCmdEndRenderPassPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdEndRenderPass is null" Nothing Nothing+  let vkCmdEndRenderPass' = mkVkCmdEndRenderPass vkCmdEndRenderPassPtr+  vkCmdEndRenderPass' (commandBufferHandle (commandBuffer))+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdExecuteCommands+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (Ptr CommandBuffer_T) -> IO ()++-- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary+-- command buffer+--+-- = Description+--+-- If any element of @pCommandBuffers@ was not recorded with the+-- 'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'+-- flag, and it was recorded into any other primary command buffer which is+-- currently in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle executable or recording state>,+-- that primary command buffer becomes+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle invalid>.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00088# Each element of+--     @pCommandBuffers@ /must/ have been allocated with a @level@ of+--     'Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY'+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00089# Each element of+--     @pCommandBuffers@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state>+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00091# If any element of+--     @pCommandBuffers@ was not recorded with the+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'+--     flag, it /must/ not be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state>+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00092# If any element of+--     @pCommandBuffers@ was not recorded with the+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'+--     flag, it /must/ not have already been recorded to @commandBuffer@+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00093# If any element of+--     @pCommandBuffers@ was not recorded with the+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'+--     flag, it /must/ not appear more than once in @pCommandBuffers@+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00094# Each element of+--     @pCommandBuffers@ /must/ have been allocated from a+--     'Vulkan.Core10.Handles.CommandPool' that was created for the same+--     queue family as the 'Vulkan.Core10.Handles.CommandPool' from which+--     @commandBuffer@ was allocated+--+-- -   #VUID-vkCmdExecuteCommands-contents-00095# If 'cmdExecuteCommands'+--     is being called within a render pass instance, that render pass+--     instance /must/ have been begun with the @contents@ parameter of+--     'cmdBeginRenderPass' set to+--     'Vulkan.Core10.Enums.SubpassContents.SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS'+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00096# If+--     'cmdExecuteCommands' is being called within a render pass instance,+--     each element of @pCommandBuffers@ /must/ have been recorded with the+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00097# If+--     'cmdExecuteCommands' is being called within a render pass instance,+--     each element of @pCommandBuffers@ /must/ have been recorded with+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@subpass@+--     set to the index of the subpass which the given command buffer will+--     be executed in+--+-- -   #VUID-vkCmdExecuteCommands-pInheritanceInfo-00098# If+--     'cmdExecuteCommands' is being called within a render pass instance,+--     the render passes specified in the+--     @pBeginInfo->pInheritanceInfo->renderPass@ members of the+--     'Vulkan.Core10.CommandBuffer.beginCommandBuffer' commands used to+--     begin recording each element of @pCommandBuffers@ /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+--     with the current render pass+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00099# If+--     'cmdExecuteCommands' is being called within a render pass instance,+--     and any element of @pCommandBuffers@ was recorded with+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@framebuffer@+--     not equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE', that+--     'Vulkan.Core10.Handles.Framebuffer' /must/ match the+--     'Vulkan.Core10.Handles.Framebuffer' used in the current render pass+--     instance+--+-- -   #VUID-vkCmdExecuteCommands-pNext-02865# If 'cmdExecuteCommands' is+--     being called within a render pass instance that included+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'+--     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of+--     @pCommandBuffers@ /must/ have been recorded with+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'+--     in the @pNext@ chain of+--     'Vulkan.Core10.CommandBuffer.CommandBufferBeginInfo'+--+-- -   #VUID-vkCmdExecuteCommands-pNext-02866# If 'cmdExecuteCommands' is+--     being called within a render pass instance that included+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'+--     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of+--     @pCommandBuffers@ /must/ have been recorded with+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@transform@+--     identical to+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@+--+-- -   #VUID-vkCmdExecuteCommands-pNext-02867# If 'cmdExecuteCommands' is+--     being called within a render pass instance that included+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'+--     in the @pNext@ chain of 'RenderPassBeginInfo', then each element of+--     @pCommandBuffers@ /must/ have been recorded with+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.CommandBufferInheritanceRenderPassTransformInfoQCOM'::@renderArea@+--     identical to 'RenderPassBeginInfo'::@renderArea@+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00100# If+--     'cmdExecuteCommands' is not being called within a render pass+--     instance, each element of @pCommandBuffers@ /must/ not have been+--     recorded with the+--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT'+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-00101# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedQueries inherited queries>+--     feature is not enabled, @commandBuffer@ /must/ not have any queries+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-00102# If @commandBuffer@+--     has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,+--     then each element of @pCommandBuffers@ /must/ have been recorded+--     with+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@occlusionQueryEnable@+--     set to 'Vulkan.Core10.FundamentalTypes.TRUE'+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-00103# If @commandBuffer@+--     has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' query+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,+--     then each element of @pCommandBuffers@ /must/ have been recorded+--     with+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@queryFlags@+--     having all bits set that are set for the query+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-00104# If @commandBuffer@+--     has a 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS'+--     query+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>,+--     then each element of @pCommandBuffers@ /must/ have been recorded+--     with+--     'Vulkan.Core10.CommandBuffer.CommandBufferInheritanceInfo'::@pipelineStatistics@+--     having all bits set that are set in the+--     'Vulkan.Core10.Handles.QueryPool' the query uses+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-00105# Each element of+--     @pCommandBuffers@ /must/ not begin any query types that are+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active>+--     in @commandBuffer@+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-01820# If @commandBuffer@+--     is a protected command buffer, then each element of+--     @pCommandBuffers@ /must/ be a protected command buffer+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-01821# If @commandBuffer@+--     is an unprotected command buffer, then each element of+--     @pCommandBuffers@ /must/ be an unprotected command buffer+--+-- -   #VUID-vkCmdExecuteCommands-None-02286# This command /must/ not be+--     recorded when transform feedback is active+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdExecuteCommands-pCommandBuffers-parameter#+--     @pCommandBuffers@ /must/ be a valid pointer to an array of+--     @commandBufferCount@ valid 'Vulkan.Core10.Handles.CommandBuffer'+--     handles+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdExecuteCommands-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdExecuteCommands-bufferlevel# @commandBuffer@ /must/ be a+--     primary 'Vulkan.Core10.Handles.CommandBuffer'+--+-- -   #VUID-vkCmdExecuteCommands-commandBufferCount-arraylength#+--     @commandBufferCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCmdExecuteCommands-commonparent# Both of @commandBuffer@,+--     and the elements of @pCommandBuffers@ /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Transfer                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdExecuteCommands :: forall io+                    . (MonadIO io)+                   => -- | @commandBuffer@ is a handle to a primary command buffer that the+                      -- secondary command buffers are executed in.+                      CommandBuffer+                   -> -- | @pCommandBuffers@ is a pointer to an array of @commandBufferCount@+                      -- secondary command buffer handles, which are recorded to execute in the+                      -- primary command buffer in the order they are listed in the array.+                      ("commandBuffers" ::: Vector CommandBuffer)+                   -> io ()+cmdExecuteCommands commandBuffer commandBuffers = liftIO . evalContT $ do+  let vkCmdExecuteCommandsPtr = pVkCmdExecuteCommands (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdExecuteCommandsPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdExecuteCommands is null" Nothing Nothing+  let vkCmdExecuteCommands' = mkVkCmdExecuteCommands vkCmdExecuteCommandsPtr+  pPCommandBuffers <- ContT $ allocaBytesAligned @(Ptr CommandBuffer_T) ((Data.Vector.length (commandBuffers)) * 8) 8+  lift $ Data.Vector.imapM_ (\i e -> poke (pPCommandBuffers `plusPtr` (8 * (i)) :: Ptr (Ptr CommandBuffer_T)) (commandBufferHandle (e))) (commandBuffers)+  lift $ vkCmdExecuteCommands' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (commandBuffers)) :: Word32)) (pPCommandBuffers)+  pure $ ()+++-- | VkClearRect - Structure specifying a clear rectangle+--+-- = Description+--+-- The layers [@baseArrayLayer@, @baseArrayLayer@ + @layerCount@) counting+-- from the base layer of the attachment image view are cleared.+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Rect2D', 'cmdClearAttachments'+data ClearRect = ClearRect+  { -- | @rect@ is the two-dimensional region to be cleared.+    rect :: Rect2D+  , -- | @baseArrayLayer@ is the first layer to be cleared.+    baseArrayLayer :: Word32+  , -- | @layerCount@ is the number of layers to clear.+    layerCount :: Word32+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ClearRect)+#endif+deriving instance Show ClearRect++instance ToCStruct ClearRect where+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ClearRect{..} f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Rect2D)) (rect) . ($ ())+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (baseArrayLayer)+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (layerCount)+    lift $ f+  cStructSize = 24+  cStructAlignment = 4+  pokeZeroCStruct p f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Rect2D)) (zero) . ($ ())+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)+    lift $ f++instance FromCStruct ClearRect where+  peekCStruct p = do+    rect <- peekCStruct @Rect2D ((p `plusPtr` 0 :: Ptr Rect2D))+    baseArrayLayer <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))+    layerCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    pure $ ClearRect+             rect baseArrayLayer layerCount++instance Zero ClearRect where+  zero = ClearRect+           zero+           zero+           zero+++-- | VkImageSubresourceLayers - Structure specifying an image subresource+-- layers+--+-- == Valid Usage+--+-- -   #VUID-VkImageSubresourceLayers-aspectMask-00167# If @aspectMask@+--     contains+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT', it+--     /must/ not contain either of+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'+--+-- -   #VUID-VkImageSubresourceLayers-aspectMask-00168# @aspectMask@ /must/+--     not contain+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'+--+-- -   #VUID-VkImageSubresourceLayers-aspectMask-02247# @aspectMask@ /must/+--     not include @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index+--     @i@+--+-- -   #VUID-VkImageSubresourceLayers-layerCount-01700# @layerCount@ /must/+--     be greater than 0+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkImageSubresourceLayers-aspectMask-parameter# @aspectMask@+--     /must/ be a valid combination of+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values+--+-- -   #VUID-VkImageSubresourceLayers-aspectMask-requiredbitmask#+--     @aspectMask@ /must/ not be @0@+--+-- = See Also+--+-- 'BufferImageCopy',+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.BufferImageCopy2KHR',+-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags', 'ImageBlit',+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageBlit2KHR', 'ImageCopy',+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageCopy2KHR', 'ImageResolve',+-- 'Vulkan.Extensions.VK_KHR_copy_commands2.ImageResolve2KHR'+data ImageSubresourceLayers = ImageSubresourceLayers+  { -- | @aspectMask@ is a combination of+    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits', selecting+    -- the color, depth and\/or stencil aspects to be copied.+    aspectMask :: ImageAspectFlags+  , -- | @mipLevel@ is the mipmap level to copy from.+    mipLevel :: Word32+  , -- | @baseArrayLayer@ and @layerCount@ are the starting layer and number of+    -- layers to copy.+    baseArrayLayer :: Word32+  , -- No documentation found for Nested "VkImageSubresourceLayers" "layerCount"+    layerCount :: Word32+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ImageSubresourceLayers)+#endif+deriving instance Show ImageSubresourceLayers++instance ToCStruct ImageSubresourceLayers where+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ImageSubresourceLayers{..} f = do+    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (aspectMask)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (mipLevel)+    poke ((p `plusPtr` 8 :: Ptr Word32)) (baseArrayLayer)+    poke ((p `plusPtr` 12 :: Ptr Word32)) (layerCount)+    f+  cStructSize = 16+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr ImageAspectFlags)) (zero)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)+    f++instance FromCStruct ImageSubresourceLayers where+  peekCStruct p = do+    aspectMask <- peek @ImageAspectFlags ((p `plusPtr` 0 :: Ptr ImageAspectFlags))+    mipLevel <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    baseArrayLayer <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))+    layerCount <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))+    pure $ ImageSubresourceLayers+             aspectMask mipLevel baseArrayLayer layerCount++instance Storable ImageSubresourceLayers where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero ImageSubresourceLayers where+  zero = ImageSubresourceLayers+           zero+           zero+           zero+           zero+++-- | VkBufferCopy - Structure specifying a buffer copy operation+--+-- == Valid Usage+--+-- -   #VUID-VkBufferCopy-size-01988# The @size@ /must/ be greater than @0@+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'cmdCopyBuffer'+data BufferCopy = BufferCopy+  { -- | @srcOffset@ is the starting offset in bytes from the start of+    -- @srcBuffer@.+    srcOffset :: DeviceSize+  , -- | @dstOffset@ is the starting offset in bytes from the start of+    -- @dstBuffer@.+    dstOffset :: DeviceSize+  , -- | @size@ is the number of bytes to copy.+    size :: DeviceSize+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (BufferCopy)+#endif+deriving instance Show BufferCopy++instance ToCStruct BufferCopy where+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p BufferCopy{..} f = do+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (srcOffset)+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (dstOffset)+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (size)+    f+  cStructSize = 24+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)+    f++instance FromCStruct BufferCopy where+  peekCStruct p = do+    srcOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))+    dstOffset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))+    size <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))+    pure $ BufferCopy+             srcOffset dstOffset size++instance Storable BufferCopy where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero BufferCopy where+  zero = BufferCopy+           zero+           zero+           zero+++-- | VkImageCopy - Structure specifying an image copy operation+--+-- = Description+--+-- For 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' images, copies are+-- performed slice by slice starting with the @z@ member of the @srcOffset@+-- or @dstOffset@, and copying @depth@ slices. For images with multiple+-- layers, copies are performed layer by layer starting with the+-- @baseArrayLayer@ member of the @srcSubresource@ or @dstSubresource@ and+-- copying @layerCount@ layers. Image data /can/ be copied between images+-- with different image types. If one image is+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' and the other image is+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' with multiple layers, then+-- each slice is copied to or from a different layer.+--+-- Copies involving a+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+-- specify the region to be copied in terms of the /plane/ to be copied,+-- not the coordinates of the multi-planar image. This means that copies+-- accessing the R\/B planes of “@_422@” format images /must/ fit the+-- copied region within half the @width@ of the parent image, and that+-- copies accessing the R\/B planes of “@_420@” format images /must/ fit+-- the copied region within half the @width@ and @height@ of the parent+-- image.+--+-- == Valid Usage+--+-- -   #VUID-VkImageCopy-extent-00140# The number of slices of the @extent@+--     (for 3D) or layers of the @srcSubresource@ (for non-3D) /must/ match+--     the number of slices of the @extent@ (for 3D) or layers of the+--     @dstSubresource@ (for non-3D)+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkImageCopy-srcSubresource-parameter# @srcSubresource@ /must/+--     be a valid 'ImageSubresourceLayers' structure+--+-- -   #VUID-VkImageCopy-dstSubresource-parameter# @dstSubresource@ /must/+--     be a valid 'ImageSubresourceLayers' structure+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Extent3D', 'ImageSubresourceLayers',+-- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'cmdCopyImage'+data ImageCopy = ImageCopy+  { -- | @srcSubresource@ and @dstSubresource@ are 'ImageSubresourceLayers'+    -- structures specifying the image subresources of the images used for the+    -- source and destination image data, respectively.+    srcSubresource :: ImageSubresourceLayers+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets+    -- in texels of the sub-regions of the source and destination image data.+    srcOffset :: Offset3D+  , -- No documentation found for Nested "VkImageCopy" "dstSubresource"+    dstSubresource :: ImageSubresourceLayers+  , -- No documentation found for Nested "VkImageCopy" "dstOffset"+    dstOffset :: Offset3D+  , -- | @extent@ is the size in texels of the image to copy in @width@, @height@+    -- and @depth@.+    extent :: Extent3D+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ImageCopy)+#endif+deriving instance Show ImageCopy++instance ToCStruct ImageCopy where+  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ImageCopy{..} f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (srcOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (dstOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (extent) . ($ ())+    lift $ f+  cStructSize = 68+  cStructAlignment = 4+  pokeZeroCStruct p f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (zero) . ($ ())+    lift $ f++instance FromCStruct ImageCopy where+  peekCStruct p = do+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))+    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 16 :: Ptr Offset3D))+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers))+    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 44 :: Ptr Offset3D))+    extent <- peekCStruct @Extent3D ((p `plusPtr` 56 :: Ptr Extent3D))+    pure $ ImageCopy+             srcSubresource srcOffset dstSubresource dstOffset extent++instance Zero ImageCopy where+  zero = ImageCopy+           zero+           zero+           zero+           zero+           zero+++-- | VkImageBlit - Structure specifying an image blit operation+--+-- = Description+--+-- For each element of the @pRegions@ array, a blit operation is performed+-- the specified source and destination regions.+--+-- == Valid Usage+--+-- -   #VUID-VkImageBlit-aspectMask-00238# The @aspectMask@ member of+--     @srcSubresource@ and @dstSubresource@ /must/ match+--+-- -   #VUID-VkImageBlit-layerCount-00239# The @layerCount@ member of+--     @srcSubresource@ and @dstSubresource@ /must/ match+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkImageBlit-srcSubresource-parameter# @srcSubresource@ /must/+--     be a valid 'ImageSubresourceLayers' structure+--+-- -   #VUID-VkImageBlit-dstSubresource-parameter# @dstSubresource@ /must/+--     be a valid 'ImageSubresourceLayers' structure+--+-- = See Also+--+-- 'ImageSubresourceLayers', 'Vulkan.Core10.FundamentalTypes.Offset3D',+-- 'cmdBlitImage'+data ImageBlit = ImageBlit+  { -- | @srcSubresource@ is the subresource to blit from.+    srcSubresource :: ImageSubresourceLayers+  , -- | @srcOffsets@ is a pointer to an array of two+    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the+    -- bounds of the source region within @srcSubresource@.+    srcOffsets :: (Offset3D, Offset3D)+  , -- | @dstSubresource@ is the subresource to blit into.+    dstSubresource :: ImageSubresourceLayers+  , -- | @dstOffsets@ is a pointer to an array of two+    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the+    -- bounds of the destination region within @dstSubresource@.+    dstOffsets :: (Offset3D, Offset3D)+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ImageBlit)+#endif+deriving instance Show ImageBlit++instance ToCStruct ImageBlit where+  withCStruct x f = allocaBytesAligned 80 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ImageBlit{..} f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())+    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))+    case (srcOffsets) of+      (e0, e1) -> do+        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())+        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())+    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))+    case (dstOffsets) of+      (e0, e1) -> do+        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())+        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())+    lift $ f+  cStructSize = 80+  cStructAlignment = 4+  pokeZeroCStruct p f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))+    case ((zero, zero)) of+      (e0, e1) -> do+        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())+        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))+    case ((zero, zero)) of+      (e0, e1) -> do+        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())+        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())+    lift $ f++instance FromCStruct ImageBlit where+  peekCStruct p = do+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))+    let psrcOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 16 :: Ptr (FixedArray 2 Offset3D)))+    srcOffsets0 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 0 :: Ptr Offset3D))+    srcOffsets1 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 12 :: Ptr Offset3D))+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 40 :: Ptr ImageSubresourceLayers))+    let pdstOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 56 :: Ptr (FixedArray 2 Offset3D)))+    dstOffsets0 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 0 :: Ptr Offset3D))+    dstOffsets1 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 12 :: Ptr Offset3D))+    pure $ ImageBlit+             srcSubresource ((srcOffsets0, srcOffsets1)) dstSubresource ((dstOffsets0, dstOffsets1))++instance Zero ImageBlit where+  zero = ImageBlit+           zero+           (zero, zero)+           zero+           (zero, zero)+++-- | VkBufferImageCopy - Structure specifying a buffer image copy operation+--+-- = Description+--+-- When copying to or from a depth or stencil aspect, the data in buffer+-- memory uses a layout that is a (mostly) tightly packed representation of+-- the depth or stencil data. Specifically:+--+-- -   data copied to or from the stencil aspect of any depth\/stencil+--     format is tightly packed with one+--     'Vulkan.Core10.Enums.Format.FORMAT_S8_UINT' value per texel.+--+-- -   data copied to or from the depth aspect of a+--     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM' or+--     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM_S8_UINT' format is+--     tightly packed with one+--     'Vulkan.Core10.Enums.Format.FORMAT_D16_UNORM' value per texel.+--+-- -   data copied to or from the depth aspect of a+--     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT' or+--     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT_S8_UINT' format is+--     tightly packed with one+--     'Vulkan.Core10.Enums.Format.FORMAT_D32_SFLOAT' value per texel.+--+-- -   data copied to or from the depth aspect of a+--     'Vulkan.Core10.Enums.Format.FORMAT_X8_D24_UNORM_PACK32' or+--     'Vulkan.Core10.Enums.Format.FORMAT_D24_UNORM_S8_UINT' format is+--     packed with one 32-bit word per texel with the D24 value in the LSBs+--     of the word, and undefined values in the eight MSBs.+--+-- Note+--+-- To copy both the depth and stencil aspects of a depth\/stencil format,+-- two entries in @pRegions@ /can/ be used, where one specifies the depth+-- aspect in @imageSubresource@, and the other specifies the stencil+-- aspect.+--+-- Because depth or stencil aspect buffer to image copies /may/ require+-- format conversions on some implementations, they are not supported on+-- queues that do not support graphics.+--+-- When copying to a depth aspect, and the+-- @VK_EXT_depth_range_unrestricted@ extension is not enabled, the data in+-- buffer memory /must/ be in the range [0,1], or the resulting values are+-- undefined.+--+-- Copies are done layer by layer starting with image layer+-- @baseArrayLayer@ member of @imageSubresource@. @layerCount@ layers are+-- copied from the source image or to the destination image.+--+-- For purpose of valid usage statements here and in related copy commands,+-- a /blocked image/ is defined as:+--+-- -   a image with a /single-plane/, “@_422@” format, which is treated as+--     a format with a 2 × 1 compressed texel block, or+--+-- -   a compressed image.+--+-- == Valid Usage+--+-- -   #VUID-VkBufferImageCopy-bufferRowLength-00195# @bufferRowLength@+--     /must/ be @0@, or greater than or equal to the @width@ member of+--     @imageExtent@+--+-- -   #VUID-VkBufferImageCopy-bufferImageHeight-00196# @bufferImageHeight@+--     /must/ be @0@, or greater than or equal to the @height@ member of+--     @imageExtent@+--+-- -   #VUID-VkBufferImageCopy-aspectMask-00212# The @aspectMask@ member of+--     @imageSubresource@ /must/ only have a single bit set+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkBufferImageCopy-imageSubresource-parameter#+--     @imageSubresource@ /must/ be a valid 'ImageSubresourceLayers'+--     structure+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.FundamentalTypes.Extent3D', 'ImageSubresourceLayers',+-- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'cmdCopyBufferToImage',+-- 'cmdCopyImageToBuffer'+data BufferImageCopy = BufferImageCopy+  { -- | @bufferOffset@ is the offset in bytes from the start of the buffer+    -- object where the image data is copied from or to.+    bufferOffset :: DeviceSize+  , -- | @bufferRowLength@ and @bufferImageHeight@ specify in texels a subregion+    -- of a larger two- or three-dimensional image in buffer memory, and+    -- control the addressing calculations. If either of these values is zero,+    -- that aspect of the buffer memory is considered to be tightly packed+    -- according to the @imageExtent@.+    bufferRowLength :: Word32+  , -- No documentation found for Nested "VkBufferImageCopy" "bufferImageHeight"+    bufferImageHeight :: Word32+  , -- | @imageSubresource@ is a 'ImageSubresourceLayers' used to specify the+    -- specific image subresources of the image used for the source or+    -- destination image data.+    imageSubresource :: ImageSubresourceLayers+  , -- | @imageOffset@ selects the initial @x@, @y@, @z@ offsets in texels of the+    -- sub-region of the source or destination image data.+    imageOffset :: Offset3D+  , -- | @imageExtent@ is the size in texels of the image to copy in @width@,+    -- @height@ and @depth@.+    imageExtent :: Extent3D+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (BufferImageCopy)+#endif+deriving instance Show BufferImageCopy++instance ToCStruct BufferImageCopy where+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p BufferImageCopy{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (bufferOffset)+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (bufferRowLength)+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (bufferImageHeight)+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (imageSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (imageOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent3D)) (imageExtent) . ($ ())+    lift $ f+  cStructSize = 56+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Extent3D)) (zero) . ($ ())+    lift $ f++instance FromCStruct BufferImageCopy where+  peekCStruct p = do+    bufferOffset <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))+    bufferRowLength <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))+    bufferImageHeight <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))+    imageSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))+    imageOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))+    imageExtent <- peekCStruct @Extent3D ((p `plusPtr` 44 :: Ptr Extent3D))+    pure $ BufferImageCopy+             bufferOffset bufferRowLength bufferImageHeight imageSubresource imageOffset imageExtent++instance Zero BufferImageCopy where+  zero = BufferImageCopy+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkImageResolve - Structure specifying an image resolve operation+--+-- == Valid Usage+--+-- -   #VUID-VkImageResolve-aspectMask-00266# The @aspectMask@ member of+--     @srcSubresource@ and @dstSubresource@ /must/ only contain+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- -   #VUID-VkImageResolve-layerCount-00267# The @layerCount@ member of+--     @srcSubresource@ and @dstSubresource@ /must/ match+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkImageResolve-srcSubresource-parameter# @srcSubresource@+--     /must/ be a valid 'ImageSubresourceLayers' structure+--+-- -   #VUID-VkImageResolve-dstSubresource-parameter# @dstSubresource@+--     /must/ be a valid 'ImageSubresourceLayers' structure+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Extent3D', 'ImageSubresourceLayers',+-- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'cmdResolveImage'+data ImageResolve = ImageResolve+  { -- | @srcSubresource@ and @dstSubresource@ are 'ImageSubresourceLayers'+    -- structures specifying the image subresources of the images used for the+    -- source and destination image data, respectively. Resolve of+    -- depth\/stencil images is not supported.+    srcSubresource :: ImageSubresourceLayers+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets+    -- in texels of the sub-regions of the source and destination image data.+    srcOffset :: Offset3D+  , -- No documentation found for Nested "VkImageResolve" "dstSubresource"+    dstSubresource :: ImageSubresourceLayers+  , -- No documentation found for Nested "VkImageResolve" "dstOffset"+    dstOffset :: Offset3D+  , -- | @extent@ is the size in texels of the source image to resolve in+    -- @width@, @height@ and @depth@.+    extent :: Extent3D+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ImageResolve)+#endif+deriving instance Show ImageResolve++instance ToCStruct ImageResolve where+  withCStruct x f = allocaBytesAligned 68 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ImageResolve{..} f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (srcOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (dstOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (extent) . ($ ())+    lift $ f+  cStructSize = 68+  cStructAlignment = 4+  pokeZeroCStruct p f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr Extent3D)) (zero) . ($ ())+    lift $ f++instance FromCStruct ImageResolve where+  peekCStruct p = do+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 0 :: Ptr ImageSubresourceLayers))+    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 16 :: Ptr Offset3D))+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 28 :: Ptr ImageSubresourceLayers))+    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 44 :: Ptr Offset3D))+    extent <- peekCStruct @Extent3D ((p `plusPtr` 56 :: Ptr Extent3D))+    pure $ ImageResolve+             srcSubresource srcOffset dstSubresource dstOffset extent++instance Zero ImageResolve where+  zero = ImageResolve+           zero+           zero+           zero+           zero+           zero+++-- | VkRenderPassBeginInfo - Structure specifying render pass begin info+--+-- = Description+--+-- @renderArea@ is the render area that is affected by the render pass+-- instance. The effects of attachment load, store and multisample resolve+-- operations are restricted to the pixels whose x and y coordinates fall+-- within the render area on all attachments. The render area extends to+-- all layers of @framebuffer@. The application /must/ ensure (using+-- scissor if necessary) that all rendering is contained within the render+-- area. The render area, after any transform specified by+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@+-- is applied, /must/ be contained within the framebuffer dimensions.+--+-- If+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>+-- is enabled, then @renderArea@ /must/ equal the framebuffer+-- pre-transformed dimensions. After @renderArea@ has been transformed by+-- 'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@,+-- the resulting render area /must/ be equal to the framebuffer dimensions.+--+-- When multiview is enabled, the resolve operation at the end of a subpass+-- applies to all views in the view mask.+--+-- Note+--+-- There /may/ be a performance cost for using a render area smaller than+-- the framebuffer, unless it matches the render area granularity for the+-- render pass.+--+-- == Valid Usage+--+-- -   #VUID-VkRenderPassBeginInfo-clearValueCount-00902# @clearValueCount@+--     /must/ be greater than the largest attachment index in @renderPass@+--     that specifies a @loadOp@ (or @stencilLoadOp@, if the attachment has+--     a depth\/stencil format) of+--     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'+--+-- -   #VUID-VkRenderPassBeginInfo-renderPass-00904# @renderPass@ /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>+--     with the @renderPass@ member of the+--     'Vulkan.Core10.Pass.FramebufferCreateInfo' structure specified when+--     creating @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02850# If the @pNext@ chain does+--     not contain+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+--     or its @deviceRenderAreaCount@ member is equal to 0,+--     @renderArea.offset.x@ /must/ be greater than or equal to 0+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02851# If the @pNext@ chain does+--     not contain+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+--     or its @deviceRenderAreaCount@ member is equal to 0,+--     @renderArea.offset.y@ /must/ be greater than or equal to 0+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02852# If the @pNext@ chain does+--     not contain+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+--     or its @deviceRenderAreaCount@ member is equal to 0,+--     @renderArea.offset.x@ + @renderArea.offset.width@ /must/ be less+--     than or equal to 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@width@+--     the @framebuffer@ was created with+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02853# If the @pNext@ chain does+--     not contain+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo'+--     or its @deviceRenderAreaCount@ member is equal to 0,+--     @renderArea.offset.y@ + @renderArea.offset.height@ /must/ be less+--     than or equal to+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@height@ the+--     @framebuffer@ was created with+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02854# If the @pNext@ chain+--     contains+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+--     the @offset.x@ member of each element of @pDeviceRenderAreas@ /must/+--     be greater than or equal to 0+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02855# If the @pNext@ chain+--     contains+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+--     the @offset.y@ member of each element of @pDeviceRenderAreas@ /must/+--     be greater than or equal to 0+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02856# If the @pNext@ chain+--     contains+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+--     @offset.x@ + @offset.width@ of each element of @pDeviceRenderAreas@+--     /must/ be less than or equal to+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@width@ the+--     @framebuffer@ was created with+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02857# If the @pNext@ chain+--     contains+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+--     @offset.y@ + @offset.height@ of each element of @pDeviceRenderAreas@+--     /must/ be less than or equal to+--     'Vulkan.Core10.Pass.FramebufferCreateInfo'::@height@ the+--     @framebuffer@ was created with+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03207# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that did not include+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     and the @pNext@ chain includes a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure, its @attachmentCount@ /must/ be zero+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03208# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     the @attachmentCount@ of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be equal to the value+--     of+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@attachmentImageInfoCount@+--     used to create @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-02780# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ have been created on+--     the same 'Vulkan.Core10.Handles.Device' as @framebuffer@ and+--     @renderPass@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03209# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value+--     of 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ equal to the+--     @flags@ member of the corresponding element of+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@+--     used to create @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03210# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value+--     of 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@ equal to the+--     @usage@ member of the corresponding element of+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@+--     used to create @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03211# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' with a width equal to the @width@+--     member of the corresponding element of+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@+--     used to create @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03212# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' with a height equal to the+--     @height@ member of the corresponding element of+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@+--     used to create @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03213# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value+--     of+--     'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@subresourceRange.layerCount@+--     equal to the @layerCount@ member of the corresponding element of+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@+--     used to create @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03214# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value+--     of+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@viewFormatCount@+--     equal to the @viewFormatCount@ member of the corresponding element+--     of+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@+--     used to create @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03215# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' of an image created with a set of+--     elements in+--     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@pViewFormats@+--     equal to the set of elements in the @pViewFormats@ member of the+--     corresponding element of+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo'::@pAttachments@+--     used to create @framebuffer@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03216# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value+--     of 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@format@ equal to+--     the corresponding value of+--     'Vulkan.Core10.Pass.AttachmentDescription'::@format@ in @renderPass@+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-03217# If @framebuffer@ was+--     created with a 'Vulkan.Core10.Pass.FramebufferCreateInfo'::@flags@+--     value that included+--     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT',+--     each element of the @pAttachments@ member of a+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'+--     structure included in the @pNext@ chain /must/ be a+--     'Vulkan.Core10.Handles.ImageView' of an image created with a value+--     of 'Vulkan.Core10.Image.ImageCreateInfo'::@samples@ equal to the+--     corresponding value of+--     'Vulkan.Core10.Pass.AttachmentDescription'::@samples@ in+--     @renderPass@+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02869# If the @pNext@ chain+--     includes+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',+--     @renderArea.offset@ /must/ equal (0,0)+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-02870# If the @pNext@ chain+--     includes+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM',+--     @renderArea.extent@ transformed by+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'::@transform@+--     /must/ equal the @framebuffer@ dimensions+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkRenderPassBeginInfo-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO'+--+-- -   #VUID-VkRenderPassBeginInfo-pNext-pNext# 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+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupRenderPassBeginInfo',+--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo',+--     'Vulkan.Extensions.VK_EXT_sample_locations.RenderPassSampleLocationsBeginInfoEXT',+--     or+--     'Vulkan.Extensions.VK_QCOM_render_pass_transform.RenderPassTransformBeginInfoQCOM'+--+-- -   #VUID-VkRenderPassBeginInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkRenderPassBeginInfo-renderPass-parameter# @renderPass@+--     /must/ be a valid 'Vulkan.Core10.Handles.RenderPass' handle+--+-- -   #VUID-VkRenderPassBeginInfo-framebuffer-parameter# @framebuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Framebuffer' handle+--+-- -   #VUID-VkRenderPassBeginInfo-pClearValues-parameter# If+--     @clearValueCount@ is not @0@, @pClearValues@ /must/ be a valid+--     pointer to an array of @clearValueCount@ 'ClearValue' unions+--+-- -   #VUID-VkRenderPassBeginInfo-commonparent# Both of @framebuffer@, and+--     @renderPass@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'ClearValue', 'Vulkan.Core10.Handles.Framebuffer',+-- 'Vulkan.Core10.FundamentalTypes.Rect2D',+-- 'Vulkan.Core10.Handles.RenderPass',+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdBeginRenderPass',+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.cmdBeginRenderPass2',+-- 'Vulkan.Extensions.VK_KHR_create_renderpass2.cmdBeginRenderPass2KHR'+data RenderPassBeginInfo (es :: [Type]) = RenderPassBeginInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @renderPass@ is the render pass to begin an instance of.+    renderPass :: RenderPass+  , -- | @framebuffer@ is the framebuffer containing the attachments that are+    -- used with the render pass.+    framebuffer :: Framebuffer+  , -- | @renderArea@ is the render area that is affected by the render pass+    -- instance, and is described in more detail below.+    renderArea :: Rect2D+  , -- | @pClearValues@ is a pointer to an array of @clearValueCount@+    -- 'ClearValue' structures that contains clear values for each attachment,+    -- if the attachment uses a @loadOp@ value of+    -- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' or if+    -- the attachment has a depth\/stencil format and uses a @stencilLoadOp@+    -- value of+    -- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR'. The+    -- array is indexed by attachment number. Only elements corresponding to+    -- cleared attachments are used. Other elements of @pClearValues@ are+    -- ignored.+    clearValues :: Vector ClearValue+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (RenderPassBeginInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (RenderPassBeginInfo es)++instance Extensible RenderPassBeginInfo where+  extensibleType = STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO+  setNext x next = x{next = next}+  getNext RenderPassBeginInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RenderPassBeginInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @RenderPassTransformBeginInfoQCOM = Just f+    | Just Refl <- eqT @e @RenderPassAttachmentBeginInfo = Just f+    | Just Refl <- eqT @e @RenderPassSampleLocationsBeginInfoEXT = Just f+    | Just Refl <- eqT @e @DeviceGroupRenderPassBeginInfo = Just f+    | otherwise = Nothing++instance (Extendss RenderPassBeginInfo es, PokeChain es) => ToCStruct (RenderPassBeginInfo es) where+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p RenderPassBeginInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (renderPass)+    lift $ poke ((p `plusPtr` 24 :: Ptr Framebuffer)) (framebuffer)+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (renderArea) . ($ ())+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (clearValues)) :: Word32))+    pPClearValues' <- ContT $ allocaBytesAligned @ClearValue ((Data.Vector.length (clearValues)) * 16) 4+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPClearValues' `plusPtr` (16 * (i)) :: Ptr ClearValue) (e) . ($ ())) (clearValues)+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr ClearValue))) (pPClearValues')+    lift $ f+  cStructSize = 64+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 16 :: Ptr RenderPass)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr Framebuffer)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Rect2D)) (zero) . ($ ())+    pPClearValues' <- ContT $ allocaBytesAligned @ClearValue ((Data.Vector.length (mempty)) * 16) 4+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPClearValues' `plusPtr` (16 * (i)) :: Ptr ClearValue) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr ClearValue))) (pPClearValues')+    lift $ f++instance es ~ '[] => Zero (RenderPassBeginInfo es) where+  zero = RenderPassBeginInfo+           ()+           zero+           zero+           zero+           mempty+++-- | VkClearDepthStencilValue - Structure specifying a clear depth stencil+-- value+--+-- == Valid Usage+--+-- -   #VUID-VkClearDepthStencilValue-depth-00022# Unless the+--     @VK_EXT_depth_range_unrestricted@ extension is enabled @depth@+--     /must/ be between @0.0@ and @1.0@, inclusive+--+-- = See Also+--+-- 'ClearValue', 'cmdClearDepthStencilImage'+data ClearDepthStencilValue = ClearDepthStencilValue+  { -- | @depth@ is the clear value for the depth aspect of the depth\/stencil+    -- attachment. It is a floating-point value which is automatically+    -- converted to the attachment’s format.+    depth :: Float+  , -- | @stencil@ is the clear value for the stencil aspect of the+    -- depth\/stencil attachment. It is a 32-bit integer value which is+    -- converted to the attachment’s format by taking the appropriate number of+    -- LSBs.+    stencil :: Word32+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ClearDepthStencilValue)+#endif+deriving instance Show ClearDepthStencilValue++instance ToCStruct ClearDepthStencilValue where+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ClearDepthStencilValue{..} f = do+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (depth))+    poke ((p `plusPtr` 4 :: Ptr Word32)) (stencil)+    f+  cStructSize = 8+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    f++instance FromCStruct ClearDepthStencilValue where+  peekCStruct p = do+    depth <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))+    stencil <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    pure $ ClearDepthStencilValue+             ((\(CFloat a) -> a) depth) stencil++instance Storable ClearDepthStencilValue where+  sizeOf ~_ = 8+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero ClearDepthStencilValue where+  zero = ClearDepthStencilValue+           zero+           zero+++-- | VkClearAttachment - Structure specifying a clear attachment+--+-- = Description+--+-- No memory barriers are needed between 'cmdClearAttachments' and+-- preceding or subsequent draw or attachment clear commands in the same+-- subpass.+--+-- The 'cmdClearAttachments' command is not affected by the bound pipeline+-- state.+--+-- Attachments /can/ also be cleared at the beginning of a render pass+-- instance by setting @loadOp@ (or @stencilLoadOp@) of+-- 'Vulkan.Core10.Pass.AttachmentDescription' to+-- 'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', as+-- described for 'Vulkan.Core10.Pass.createRenderPass'.+--+-- == Valid Usage+--+-- -   #VUID-VkClearAttachment-aspectMask-00019# If @aspectMask@ includes+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT', it+--     /must/ not include+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'+--+-- -   #VUID-VkClearAttachment-aspectMask-00020# @aspectMask@ /must/ not+--     include+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'+--+-- -   #VUID-VkClearAttachment-aspectMask-02246# @aspectMask@ /must/ not+--     include @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@+--+-- -   #VUID-VkClearAttachment-clearValue-00021# @clearValue@ /must/ be a+--     valid 'ClearValue' union+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkClearAttachment-aspectMask-parameter# @aspectMask@ /must/ be+--     a valid combination of+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values+--+-- -   #VUID-VkClearAttachment-aspectMask-requiredbitmask# @aspectMask@+--     /must/ not be @0@ -- -- = See Also --
src/Vulkan/Core10/CommandPool.hs view
@@ -78,22 +78,26 @@ -- -- == Valid Usage ----- -   @pCreateInfo->queueFamilyIndex@ /must/ be the index of a queue+-- -   #VUID-vkCreateCommandPool-queueFamilyIndex-01937#+--     @pCreateInfo->queueFamilyIndex@ /must/ be the index of a queue --     family available in the logical device @device@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateCommandPool-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'CommandPoolCreateInfo' structure+-- -   #VUID-vkCreateCommandPool-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'CommandPoolCreateInfo'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateCommandPool-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pCommandPool@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.CommandPool' handle+-- -   #VUID-vkCreateCommandPool-pCommandPool-parameter# @pCommandPool@+--     /must/ be a valid pointer to a 'Vulkan.Core10.Handles.CommandPool'+--     handle -- -- == Return Codes --@@ -176,32 +180,37 @@ -- -- == Valid Usage ----- -   All 'Vulkan.Core10.Handles.CommandBuffer' objects allocated from+-- -   #VUID-vkDestroyCommandPool-commandPool-00041# All+--     'Vulkan.Core10.Handles.CommandBuffer' objects allocated from --     @commandPool@ /must/ not be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state> ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyCommandPool-commandPool-00042# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @commandPool@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyCommandPool-commandPool-00043# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @commandPool@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyCommandPool-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @commandPool@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'---     handle+-- -   #VUID-vkDestroyCommandPool-commandPool-parameter# If @commandPool@+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @commandPool@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandPool' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyCommandPool-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @commandPool@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyCommandPool-commandPool-parent# If @commandPool@ is a+--     valid handle, it /must/ have been created, allocated, or retrieved+--     from @device@ -- -- == Host Synchronization --@@ -260,23 +269,26 @@ -- -- == Valid Usage ----- -   All 'Vulkan.Core10.Handles.CommandBuffer' objects allocated from+-- -   #VUID-vkResetCommandPool-commandPool-00040# All+--     'Vulkan.Core10.Handles.CommandBuffer' objects allocated from --     @commandPool@ /must/ not be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state> -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkResetCommandPool-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'---     handle+-- -   #VUID-vkResetCommandPool-commandPool-parameter# @commandPool@ /must/+--     be a valid 'Vulkan.Core10.Handles.CommandPool' handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-vkResetCommandPool-flags-parameter# @flags@ /must/ be a valid+--     combination of --     'Vulkan.Core10.Enums.CommandPoolResetFlagBits.CommandPoolResetFlagBits' --     values ----- -   @commandPool@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkResetCommandPool-commandPool-parent# @commandPool@ /must/+--     have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -322,18 +334,20 @@ -- -- == Valid Usage ----- -   If the protected memory feature is not enabled, the+-- -   #VUID-VkCommandPoolCreateInfo-flags-02860# If the protected memory+--     feature is not enabled, the --     'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.COMMAND_POOL_CREATE_PROTECTED_BIT' --     bit of @flags@ /must/ not be set -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkCommandPoolCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkCommandPoolCreateInfo-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkCommandPoolCreateInfo-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.CommandPoolCreateFlagBits.CommandPoolCreateFlagBits' --     values --
src/Vulkan/Core10/DescriptorSet.hs view
@@ -148,16 +148,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateDescriptorSetLayout-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateDescriptorSetLayout-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'DescriptorSetLayoutCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateDescriptorSetLayout-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSetLayout@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateDescriptorSetLayout-pSetLayout-parameter# @pSetLayout@+--     /must/ be a valid pointer to a --     'Vulkan.Core10.Handles.DescriptorSetLayout' handle -- -- == Return Codes@@ -229,27 +233,33 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00284# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @descriptorSetLayout@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00285# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @descriptorSetLayout@ was created, @pAllocator@ /must/ --     be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyDescriptorSetLayout-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @descriptorSetLayout@ is not+-- -   #VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-parameter# If+--     @descriptorSetLayout@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @descriptorSetLayout@ --     /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSetLayout' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroyDescriptorSetLayout-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @descriptorSetLayout@ is a valid handle, it /must/ have been+-- -   #VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-parent# If+--     @descriptorSetLayout@ is a valid handle, it /must/ have been --     created, allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -304,16 +314,19 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateDescriptorPool-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'DescriptorPoolCreateInfo' structure+-- -   #VUID-vkCreateDescriptorPool-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'DescriptorPoolCreateInfo'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateDescriptorPool-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pDescriptorPool@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateDescriptorPool-pDescriptorPool-parameter#+--     @pDescriptorPool@ /must/ be a valid pointer to a --     'Vulkan.Core10.Handles.DescriptorPool' handle -- -- == Return Codes@@ -394,30 +407,36 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @descriptorPool@ (via any---     allocated descriptor sets) /must/ have completed execution+-- -   #VUID-vkDestroyDescriptorPool-descriptorPool-00303# All submitted+--     commands that refer to @descriptorPool@ (via any allocated+--     descriptor sets) /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDescriptorPool-descriptorPool-00304# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @descriptorPool@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDescriptorPool-descriptorPool-00305# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @descriptorPool@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyDescriptorPool-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @descriptorPool@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkDestroyDescriptorPool-descriptorPool-parameter# If+--     @descriptorPool@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @descriptorPool@ /must/ be a valid --     'Vulkan.Core10.Handles.DescriptorPool' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyDescriptorPool-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @descriptorPool@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkDestroyDescriptorPool-descriptorPool-parent# If+--     @descriptorPool@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -468,20 +487,23 @@ -- -- == Valid Usage ----- -   All uses of @descriptorPool@ (via any allocated descriptor sets)---     /must/ have completed execution+-- -   #VUID-vkResetDescriptorPool-descriptorPool-00313# All uses of+--     @descriptorPool@ (via any allocated descriptor sets) /must/ have+--     completed execution -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkResetDescriptorPool-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @descriptorPool@ /must/ be a valid+-- -   #VUID-vkResetDescriptorPool-descriptorPool-parameter#+--     @descriptorPool@ /must/ be a valid --     'Vulkan.Core10.Handles.DescriptorPool' handle ----- -   @flags@ /must/ be @0@+-- -   #VUID-vkResetDescriptorPool-flags-zerobitmask# @flags@ /must/ be @0@ ----- -   @descriptorPool@ /must/ have been created, allocated, or retrieved---     from @device@+-- -   #VUID-vkResetDescriptorPool-descriptorPool-parent# @descriptorPool@+--     /must/ have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -589,16 +611,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkAllocateDescriptorSets-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pAllocateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkAllocateDescriptorSets-pAllocateInfo-parameter#+--     @pAllocateInfo@ /must/ be a valid pointer to a valid --     'DescriptorSetAllocateInfo' structure ----- -   @pDescriptorSets@ /must/ be a valid pointer to an array of+-- -   #VUID-vkAllocateDescriptorSets-pDescriptorSets-parameter#+--     @pDescriptorSets@ /must/ be a valid pointer to an array of --     @pAllocateInfo->descriptorSetCount@ --     'Vulkan.Core10.Handles.DescriptorSet' handles ----- -   @pAllocateInfo->descriptorSetCount@ /must/ be greater than @0@+-- -   #VUID-vkAllocateDescriptorSets-pAllocateInfo::descriptorSetCount-arraylength#+--     @pAllocateInfo->descriptorSetCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -675,35 +701,39 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to any element of---     @pDescriptorSets@ /must/ have completed execution+-- -   #VUID-vkFreeDescriptorSets-pDescriptorSets-00309# All submitted+--     commands that refer to any element of @pDescriptorSets@ /must/ have+--     completed execution ----- -   @pDescriptorSets@ /must/ be a valid pointer to an array of---     @descriptorSetCount@ 'Vulkan.Core10.Handles.DescriptorSet' handles,---     each element of which /must/ either be a valid handle or+-- -   #VUID-vkFreeDescriptorSets-pDescriptorSets-00310# @pDescriptorSets@+--     /must/ be a valid pointer to an array of @descriptorSetCount@+--     'Vulkan.Core10.Handles.DescriptorSet' handles, each element of which+--     /must/ either be a valid handle or --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   Each valid handle in @pDescriptorSets@ /must/ have been allocated---     from @descriptorPool@------ -   @descriptorPool@ /must/ have been created with the+-- -   #VUID-vkFreeDescriptorSets-descriptorPool-00312# @descriptorPool@+--     /must/ have been created with the --     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT' --     flag -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkFreeDescriptorSets-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @descriptorPool@ /must/ be a valid+-- -   #VUID-vkFreeDescriptorSets-descriptorPool-parameter#+--     @descriptorPool@ /must/ be a valid --     'Vulkan.Core10.Handles.DescriptorPool' handle ----- -   @descriptorSetCount@ /must/ be greater than @0@+-- -   #VUID-vkFreeDescriptorSets-descriptorSetCount-arraylength#+--     @descriptorSetCount@ /must/ be greater than @0@ ----- -   @descriptorPool@ /must/ have been created, allocated, or retrieved---     from @device@+-- -   #VUID-vkFreeDescriptorSets-descriptorPool-parent# @descriptorPool@+--     /must/ have been created, allocated, or retrieved from @device@ ----- -   Each element of @pDescriptorSets@ that is a valid handle /must/ have---     been created, allocated, or retrieved from @descriptorPool@+-- -   #VUID-vkFreeDescriptorSets-pDescriptorSets-parent# Each element of+--     @pDescriptorSets@ that is a valid handle /must/ have been created,+--     allocated, or retrieved from @descriptorPool@ -- -- == Host Synchronization --@@ -781,8 +811,8 @@ -- -- == Valid Usage ----- -   Descriptor bindings updated by this command which were created---     without the+-- -   #VUID-vkUpdateDescriptorSets-None-03047# Descriptor bindings updated+--     by this command which were created without the --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' --     or --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'@@ -792,13 +822,16 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkUpdateDescriptorSets-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @descriptorWriteCount@ is not @0@, @pDescriptorWrites@ /must/ be---     a valid pointer to an array of @descriptorWriteCount@ valid+-- -   #VUID-vkUpdateDescriptorSets-pDescriptorWrites-parameter# If+--     @descriptorWriteCount@ is not @0@, @pDescriptorWrites@ /must/ be a+--     valid pointer to an array of @descriptorWriteCount@ valid --     'WriteDescriptorSet' structures ----- -   If @descriptorCopyCount@ is not @0@, @pDescriptorCopies@ /must/ be a+-- -   #VUID-vkUpdateDescriptorSets-pDescriptorCopies-parameter# If+--     @descriptorCopyCount@ is not @0@, @pDescriptorCopies@ /must/ be a --     valid pointer to an array of @descriptorCopyCount@ valid --     'CopyDescriptorSet' structures --@@ -865,28 +898,31 @@ -- -- == Valid Usage ----- -   @offset@ /must/ be less than the size of @buffer@+-- -   #VUID-VkDescriptorBufferInfo-offset-00340# @offset@ /must/ be less+--     than the size of @buffer@ ----- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @range@ /must/ be greater than @0@+-- -   #VUID-VkDescriptorBufferInfo-range-00341# If @range@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ /must/ be greater+--     than @0@ ----- -   If @range@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @range@ /must/ be less than or equal to the size of @buffer@ minus---     @offset@+-- -   #VUID-VkDescriptorBufferInfo-range-00342# If @range@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @range@ /must/ be less than+--     or equal to the size of @buffer@ minus @offset@ ----- -   If the+-- -   #VUID-VkDescriptorBufferInfo-buffer-02998# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor> --     feature is not enabled, @buffer@ /must/ not be --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @buffer@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', @offset@---     /must/ be zero and @range@ /must/ be---     'Vulkan.Core10.APIConstants.WHOLE_SIZE'+-- -   #VUID-VkDescriptorBufferInfo-buffer-02999# If @buffer@ is+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @offset@ /must/ be zero+--     and @range@ /must/ be 'Vulkan.Core10.APIConstants.WHOLE_SIZE' -- -- == Valid Usage (Implicit) ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkDescriptorBufferInfo-buffer-parameter# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.Buffer' handle -- -- = See Also --@@ -955,23 +991,24 @@ -- -- == Valid Usage ----- -   @imageView@ /must/ not be 2D or 2D array image view created from a---     3D image+-- -   #VUID-VkDescriptorImageInfo-imageView-00343# @imageView@ /must/ not+--     be 2D or 2D array image view created from a 3D image ----- -   If @imageView@ is created from a depth\/stencil image, the---     @aspectMask@ used to create the @imageView@ /must/ include either+-- -   #VUID-VkDescriptorImageInfo-imageView-01976# If @imageView@ is+--     created from a depth\/stencil image, the @aspectMask@ used to create+--     the @imageView@ /must/ include either --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT' --     but not both ----- -   @imageLayout@ /must/ match the actual---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' of each subresource---     accessible from @imageView@ at the time this descriptor is accessed---     as defined by the+-- -   #VUID-VkDescriptorImageInfo-imageLayout-00344# @imageLayout@ /must/+--     match the actual 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' of+--     each subresource accessible from @imageView@ at the time this+--     descriptor is accessed as defined by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts-matching-rule image layout matching rules> ----- -   If @sampler@ is used and the 'Vulkan.Core10.Enums.Format.Format' of---     the image is a+-- -   #VUID-VkDescriptorImageInfo-sampler-01564# If @sampler@ is used and+--     the 'Vulkan.Core10.Enums.Format.Format' of the image is a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>, --     the image /must/ have been created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',@@ -981,7 +1018,8 @@ --     or (for three-plane formats only) --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' ----- -   If the @VK_KHR_portability_subset@ extension is enabled, and+-- -   #VUID-VkDescriptorImageInfo-mutableComparisonSamplers-04450# If the+--     @VK_KHR_portability_subset@ extension is enabled, and --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@mutableComparisonSamplers@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE', then @sampler@ /must/ --     have been created with@@ -990,9 +1028,10 @@ -- -- == Valid Usage (Implicit) ----- -   Both of @imageView@, and @sampler@ that are valid handles of---     non-ignored parameters /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkDescriptorImageInfo-commonparent# Both of @imageView@, and+--     @sampler@ that are valid handles of non-ignored parameters /must/+--     have been created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device' -- -- = See Also --@@ -1115,43 +1154,49 @@ -- -- == Valid Usage ----- -   @dstBinding@ /must/ be less than or equal to the maximum value of---     @binding@ of all 'DescriptorSetLayoutBinding' structures specified---     when @dstSet@’s descriptor set layout was created+-- -   #VUID-VkWriteDescriptorSet-dstBinding-00315# @dstBinding@ /must/ be+--     less than or equal to the maximum value of @binding@ of all+--     'DescriptorSetLayoutBinding' structures specified when @dstSet@’s+--     descriptor set layout was created ----- -   @dstBinding@ /must/ be a binding with a non-zero @descriptorCount@+-- -   #VUID-VkWriteDescriptorSet-dstBinding-00316# @dstBinding@ /must/ be+--     a binding with a non-zero @descriptorCount@ ----- -   All consecutive bindings updated via a single 'WriteDescriptorSet'---     structure, except those with a @descriptorCount@ of zero, /must/---     have identical @descriptorType@ and @stageFlags@+-- -   #VUID-VkWriteDescriptorSet-descriptorCount-00317# All consecutive+--     bindings updated via a single 'WriteDescriptorSet' structure, except+--     those with a @descriptorCount@ of zero, /must/ have identical+--     @descriptorType@ and @stageFlags@ ----- -   All consecutive bindings updated via a single 'WriteDescriptorSet'---     structure, except those with a @descriptorCount@ of zero, /must/ all---     either use immutable samplers or /must/ all not use immutable---     samplers+-- -   #VUID-VkWriteDescriptorSet-descriptorCount-00318# All consecutive+--     bindings updated via a single 'WriteDescriptorSet' structure, except+--     those with a @descriptorCount@ of zero, /must/ all either use+--     immutable samplers or /must/ all not use immutable samplers ----- -   @descriptorType@ /must/ match the type of @dstBinding@ within---     @dstSet@+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00319# @descriptorType@+--     /must/ match the type of @dstBinding@ within @dstSet@ ----- -   @dstSet@ /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSet'---     handle+-- -   #VUID-VkWriteDescriptorSet-dstSet-00320# @dstSet@ /must/ be a valid+--     'Vulkan.Core10.Handles.DescriptorSet' handle ----- -   The sum of @dstArrayElement@ and @descriptorCount@ /must/ be less---     than or equal to the number of array elements in the descriptor set---     binding specified by @dstBinding@, and all applicable consecutive---     bindings, as described by+-- -   #VUID-VkWriteDescriptorSet-dstArrayElement-00321# The sum of+--     @dstArrayElement@ and @descriptorCount@ /must/ be less than or equal+--     to the number of array elements in the descriptor set binding+--     specified by @dstBinding@, and all applicable consecutive bindings,+--     as described by --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive> ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02219# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', --     @dstArrayElement@ /must/ be an integer multiple of @4@ ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02220# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', --     @descriptorCount@ /must/ be an integer multiple of @4@ ----- -   If @descriptorType@ is---     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00322# If @descriptorType@+--     is 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',@@ -1160,7 +1205,8 @@ --     @pImageInfo@ /must/ be a valid pointer to an array of --     @descriptorCount@ valid 'DescriptorImageInfo' structures ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02994# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',@@ -1168,7 +1214,8 @@ --     'Vulkan.Core10.Handles.BufferView' handle or --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02995# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'@@ -1177,7 +1224,8 @@ --     feature is not enabled, each element of @pTexelBufferView@ /must/ --     not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00324# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',@@ -1186,15 +1234,16 @@ --     @pBufferInfo@ /must/ be a valid pointer to an array of --     @descriptorCount@ valid 'DescriptorBufferInfo' structures ----- -   If @descriptorType@ is---     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00325# If @descriptorType@+--     is 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     and @dstSet@ was not allocated with a layout that included immutable --     samplers for @dstBinding@ with @descriptorType@, the @sampler@ --     member of each element of @pImageInfo@ /must/ be a valid --     'Vulkan.Core10.Handles.Sampler' object ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02996# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',@@ -1204,7 +1253,8 @@ --     either a valid 'Vulkan.Core10.Handles.ImageView' handle or --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02997# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',@@ -1215,27 +1265,31 @@ --     feature is not enabled, the @imageView@ member of each element of --     @pImageInfo@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02221# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', --     the @pNext@ chain /must/ include a --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT' --     structure whose @dataSize@ member equals @descriptorCount@ ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02382# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR', --     the @pNext@ chain /must/ include a --     'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR' --     structure whose @accelerationStructureCount@ member equals --     @descriptorCount@ ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-01946# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', --     then the @imageView@ member of each @pImageInfo@ element /must/ have --     been created without a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo' --     structure in its @pNext@ chain ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02738# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     and if any element of @pImageInfo@ has a @imageView@ member that was --     created with a@@ -1247,7 +1301,8 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo' --     object ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-01948# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     and @dstSet@ was allocated with a layout that included immutable --     samplers for @dstBinding@, then the @imageView@ member of each@@ -1260,7 +1315,8 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo' --     to the corresponding immutable sampler ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00327# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',@@ -1268,7 +1324,8 @@ --     multiple of --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minUniformBufferOffsetAlignment@ ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00328# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',@@ -1276,7 +1333,8 @@ --     multiple of --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minStorageBufferOffsetAlignment@ ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00329# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',@@ -1287,7 +1345,8 @@ --     completely and contiguously to a single --     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00330# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',@@ -1296,7 +1355,8 @@ --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' --     set ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00331# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',@@ -1305,7 +1365,8 @@ --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT' --     set ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00332# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',@@ -1315,7 +1376,8 @@ --     equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxUniformBufferRange@ ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00333# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',@@ -1325,28 +1387,32 @@ --     equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxStorageBufferRange@ ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00334# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER', --     the 'Vulkan.Core10.Handles.Buffer' that each element of --     @pTexelBufferView@ was created from /must/ have been created with --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT' --     set ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00335# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER', --     the 'Vulkan.Core10.Handles.Buffer' that each element of --     @pTexelBufferView@ was created from /must/ have been created with --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT' --     set ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00336# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT', --     the @imageView@ member of each element of @pImageInfo@ /must/ have --     been created with the identity swizzle ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00337# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',@@ -1354,82 +1420,85 @@ --     been created with --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' set ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-04149# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE' --     the @imageLayout@ member of each element of @pImageInfo@ /must/ be a --     member of the list given in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage Sampled Image> ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-04150# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER' --     the @imageLayout@ member of each element of @pImageInfo@ /must/ be a --     member of the list given in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler Combined Image Sampler> ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-04151# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT' --     the @imageLayout@ member of each element of @pImageInfo@ /must/ be a --     member of the list given in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment Input Attachment> ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-04152# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE' --     the @imageLayout@ member of each element of @pImageInfo@ /must/ be a --     member of the list given in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage Storage Image> ----- -   If @descriptorType@ is---     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',---     the @imageLayout@ member of each element of @pImageInfo@ /must/ be a---     member of the list given in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage Storage Image>------ -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00338# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT', --     the @imageView@ member of each element of @pImageInfo@ /must/ have --     been created with --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' --     set ----- -   If @descriptorType@ is+-- -   #VUID-VkWriteDescriptorSet-descriptorType-00339# If @descriptorType@+--     is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', --     the @imageView@ member of each element of @pImageInfo@ /must/ have --     been created with --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT' set ----- -   All consecutive bindings updated via a single 'WriteDescriptorSet'---     structure, except those with a @descriptorCount@ of zero, /must/---     have identical+-- -   #VUID-VkWriteDescriptorSet-descriptorCount-03048# All consecutive+--     bindings updated via a single 'WriteDescriptorSet' structure, except+--     those with a @descriptorCount@ of zero, /must/ have identical --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlagBits' ----- -   If @descriptorType@ is---     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER', then---     @dstSet@ /must/ not have been allocated with a layout that included---     immutable samplers for @dstBinding@+-- -   #VUID-VkWriteDescriptorSet-descriptorType-02752# If @descriptorType@+--     is 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',+--     then @dstSet@ /must/ not have been allocated with a layout that+--     included immutable samplers for @dstBinding@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkWriteDescriptorSet-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET' ----- -   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+-- -   #VUID-VkWriteDescriptorSet-pNext-pNext# 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 --     'Vulkan.Extensions.VK_KHR_ray_tracing.WriteDescriptorSetAccelerationStructureKHR' --     or --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.WriteDescriptorSetInlineUniformBlockEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkWriteDescriptorSet-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @descriptorType@ /must/ be a valid+-- -   #VUID-VkWriteDescriptorSet-descriptorType-parameter#+--     @descriptorType@ /must/ be a valid --     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value ----- -   @descriptorCount@ /must/ be greater than @0@+-- -   #VUID-VkWriteDescriptorSet-descriptorCount-arraylength#+--     @descriptorCount@ /must/ be greater than @0@ ----- -   Both of @dstSet@, and the elements of @pTexelBufferView@ that are---     valid handles of non-ignored parameters /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkWriteDescriptorSet-commonparent# Both of @dstSet@, and the+--     elements of @pTexelBufferView@ that are valid handles of non-ignored+--     parameters /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device' -- -- = See Also --@@ -1594,96 +1663,106 @@ -- -- == Valid Usage ----- -   @srcBinding@ /must/ be a valid binding within @srcSet@+-- -   #VUID-VkCopyDescriptorSet-srcBinding-00345# @srcBinding@ /must/ be a+--     valid binding within @srcSet@ ----- -   The sum of @srcArrayElement@ and @descriptorCount@ /must/ be less---     than or equal to the number of array elements in the descriptor set---     binding specified by @srcBinding@, and all applicable consecutive---     bindings, as described by+-- -   #VUID-VkCopyDescriptorSet-srcArrayElement-00346# The sum of+--     @srcArrayElement@ and @descriptorCount@ /must/ be less than or equal+--     to the number of array elements in the descriptor set binding+--     specified by @srcBinding@, and all applicable consecutive bindings,+--     as described by --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive> ----- -   @dstBinding@ /must/ be a valid binding within @dstSet@+-- -   #VUID-VkCopyDescriptorSet-dstBinding-00347# @dstBinding@ /must/ be a+--     valid binding within @dstSet@ ----- -   The sum of @dstArrayElement@ and @descriptorCount@ /must/ be less---     than or equal to the number of array elements in the descriptor set---     binding specified by @dstBinding@, and all applicable consecutive---     bindings, as described by+-- -   #VUID-VkCopyDescriptorSet-dstArrayElement-00348# The sum of+--     @dstArrayElement@ and @descriptorCount@ /must/ be less than or equal+--     to the number of array elements in the descriptor set binding+--     specified by @dstBinding@, and all applicable consecutive bindings,+--     as described by --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive> ----- -   The type of @dstBinding@ within @dstSet@ /must/ be equal to the type---     of @srcBinding@ within @srcSet@+-- -   #VUID-VkCopyDescriptorSet-dstBinding-02632# The type of @dstBinding@+--     within @dstSet@ /must/ be equal to the type of @srcBinding@ within+--     @srcSet@ ----- -   If @srcSet@ is equal to @dstSet@, then the source and destination---     ranges of descriptors /must/ not overlap, where the ranges /may/---     include array elements from consecutive bindings as described by+-- -   #VUID-VkCopyDescriptorSet-srcSet-00349# If @srcSet@ is equal to+--     @dstSet@, then the source and destination ranges of descriptors+--     /must/ not overlap, where the ranges /may/ include array elements+--     from consecutive bindings as described by --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive> ----- -   If the descriptor type of the descriptor set binding specified by---     @srcBinding@ is+-- -   #VUID-VkCopyDescriptorSet-srcBinding-02223# If the descriptor type+--     of the descriptor set binding specified by @srcBinding@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', --     @srcArrayElement@ /must/ be an integer multiple of @4@ ----- -   If the descriptor type of the descriptor set binding specified by---     @dstBinding@ is+-- -   #VUID-VkCopyDescriptorSet-dstBinding-02224# If the descriptor type+--     of the descriptor set binding specified by @dstBinding@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', --     @dstArrayElement@ /must/ be an integer multiple of @4@ ----- -   If the descriptor type of the descriptor set binding specified by---     either @srcBinding@ or @dstBinding@ is+-- -   #VUID-VkCopyDescriptorSet-srcBinding-02225# If the descriptor type+--     of the descriptor set binding specified by either @srcBinding@ or+--     @dstBinding@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', --     @descriptorCount@ /must/ be an integer multiple of @4@ ----- -   If @srcSet@’s layout was created with the+-- -   #VUID-VkCopyDescriptorSet-srcSet-01918# If @srcSet@’s layout was+--     created with the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     flag set, then @dstSet@’s layout /must/ also have been created with --     the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     flag set ----- -   If @srcSet@’s layout was created without the+-- -   #VUID-VkCopyDescriptorSet-srcSet-01919# If @srcSet@’s layout was+--     created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     flag set, then @dstSet@’s layout /must/ also have been created --     without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     flag set ----- -   If the descriptor pool from which @srcSet@ was allocated was created---     with the+-- -   #VUID-VkCopyDescriptorSet-srcSet-01920# If the descriptor pool from+--     which @srcSet@ was allocated was created with the --     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT' --     flag set, then the descriptor pool from which @dstSet@ was allocated --     /must/ also have been created with the --     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT' --     flag set ----- -   If the descriptor pool from which @srcSet@ was allocated was created---     without the+-- -   #VUID-VkCopyDescriptorSet-srcSet-01921# If the descriptor pool from+--     which @srcSet@ was allocated was created without the --     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT' --     flag set, then the descriptor pool from which @dstSet@ was allocated --     /must/ also have been created without the --     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT' --     flag set ----- -   If the descriptor type of the descriptor set binding specified by---     @dstBinding@ is+-- -   #VUID-VkCopyDescriptorSet-dstBinding-02753# If the descriptor type+--     of the descriptor set binding specified by @dstBinding@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER', then --     @dstSet@ /must/ not have been allocated with a layout that included --     immutable samplers for @dstBinding@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkCopyDescriptorSet-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_DESCRIPTOR_SET' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkCopyDescriptorSet-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @srcSet@ /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSet'---     handle+-- -   #VUID-VkCopyDescriptorSet-srcSet-parameter# @srcSet@ /must/ be a+--     valid 'Vulkan.Core10.Handles.DescriptorSet' handle ----- -   @dstSet@ /must/ be a valid 'Vulkan.Core10.Handles.DescriptorSet'---     handle+-- -   #VUID-VkCopyDescriptorSet-dstSet-parameter# @dstSet@ /must/ be a+--     valid 'Vulkan.Core10.Handles.DescriptorSet' handle ----- -   Both of @dstSet@, and @srcSet@ /must/ have been created, allocated,---     or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkCopyDescriptorSet-commonparent# Both of @dstSet@, and+--     @srcSet@ /must/ have been created, allocated, or retrieved from the+--     same 'Vulkan.Core10.Handles.Device' -- -- = See Also --@@ -1833,39 +1912,46 @@ -- -- == Valid Usage ----- -   If @descriptorType@ is+-- -   #VUID-VkDescriptorSetLayoutBinding-descriptorType-00282# If+--     @descriptorType@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     and @descriptorCount@ is not @0@ and @pImmutableSamplers@ is not --     @NULL@, @pImmutableSamplers@ /must/ be a valid pointer to an array --     of @descriptorCount@ valid 'Vulkan.Core10.Handles.Sampler' handles ----- -   If @descriptorType@ is+-- -   #VUID-VkDescriptorSetLayoutBinding-descriptorType-02209# If+--     @descriptorType@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' --     then @descriptorCount@ /must/ be a multiple of @4@ ----- -   If @descriptorType@ is+-- -   #VUID-VkDescriptorSetLayoutBinding-descriptorType-02210# If+--     @descriptorType@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' --     then @descriptorCount@ /must/ be less than or equal to --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxInlineUniformBlockSize@ ----- -   If @descriptorCount@ is not @0@, @stageFlags@ /must/ be a valid+-- -   #VUID-VkDescriptorSetLayoutBinding-descriptorCount-00283# If+--     @descriptorCount@ is not @0@, @stageFlags@ /must/ be a valid --     combination of --     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values ----- -   If @descriptorType@ is+-- -   #VUID-VkDescriptorSetLayoutBinding-descriptorType-01510# If+--     @descriptorType@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT' --     and @descriptorCount@ is not @0@, then @stageFlags@ /must/ be @0@ or --     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT' ----- -   The sampler objects indicated by @pImmutableSamplers@ /must/ not---     have a @borderColor@ with one of the values+-- -   #VUID-VkDescriptorSetLayoutBinding-pImmutableSamplers-04009# The+--     sampler objects indicated by @pImmutableSamplers@ /must/ not have a+--     @borderColor@ with one of the values --     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or --     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT' -- -- == Valid Usage (Implicit) ----- -   @descriptorType@ /must/ be a valid+-- -   #VUID-VkDescriptorSetLayoutBinding-descriptorType-parameter#+--     @descriptorType@ /must/ be a valid --     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value -- -- = See Also@@ -1969,10 +2055,12 @@ -- -- == Valid Usage ----- -   The 'DescriptorSetLayoutBinding'::@binding@ members of the elements---     of the @pBindings@ array /must/ each have different values+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-binding-00279# The+--     'DescriptorSetLayoutBinding'::@binding@ members of the elements of+--     the @pBindings@ array /must/ each have different values ----- -   If @flags@ contains+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-flags-00280# If @flags@+--     contains --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR', --     then all elements of @pBindings@ /must/ not have a @descriptorType@ --     of@@ -1980,24 +2068,28 @@ --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC' ----- -   If @flags@ contains+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-flags-02208# If @flags@+--     contains --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR', --     then all elements of @pBindings@ /must/ not have a @descriptorType@ --     of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' ----- -   If @flags@ contains+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-flags-00281# If @flags@+--     contains --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR', --     then the total number of elements of all bindings /must/ be less --     than or equal to --     'Vulkan.Extensions.VK_KHR_push_descriptor.PhysicalDevicePushDescriptorPropertiesKHR'::@maxPushDescriptors@ ----- -   If any binding has the+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-flags-03000# If any binding+--     has the --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' --     bit set, @flags@ /must/ include --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' ----- -   If any binding has the+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-descriptorType-03001# If any+--     binding has the --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' --     bit set, then all bindings /must/ not have @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'@@ -2006,21 +2098,24 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext# @pNext@ /must/ be+--     @NULL@ or a pointer to a valid instance of --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetLayoutBindingFlagsCreateInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-flags-parameter# @flags@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DescriptorSetLayoutCreateFlagBits' --     values ----- -   If @bindingCount@ is not @0@, @pBindings@ /must/ be a valid pointer---     to an array of @bindingCount@ valid 'DescriptorSetLayoutBinding'+-- -   #VUID-VkDescriptorSetLayoutCreateInfo-pBindings-parameter# If+--     @bindingCount@ is not @0@, @pBindings@ /must/ be a valid pointer to+--     an array of @bindingCount@ valid 'DescriptorSetLayoutBinding' --     structures -- -- = See Also@@ -2112,15 +2207,16 @@ -- -- == Valid Usage ----- -   @descriptorCount@ /must/ be greater than @0@+-- -   #VUID-VkDescriptorPoolSize-descriptorCount-00302# @descriptorCount@+--     /must/ be greater than @0@ ----- -   If @type@ is+-- -   #VUID-VkDescriptorPoolSize-type-02218# If @type@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' --     then @descriptorCount@ /must/ be a multiple of @4@ -- -- == Valid Usage (Implicit) ----- -   @type@ /must/ be a valid+-- -   #VUID-VkDescriptorPoolSize-type-parameter# @type@ /must/ be a valid --     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value -- -- = See Also@@ -2218,27 +2314,32 @@ -- -- == Valid Usage ----- -   @maxSets@ /must/ be greater than @0@+-- -   #VUID-VkDescriptorPoolCreateInfo-maxSets-00301# @maxSets@ /must/ be+--     greater than @0@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDescriptorPoolCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkDescriptorPoolCreateInfo-pNext-pNext# @pNext@ /must/ be+--     @NULL@ or a pointer to a valid instance of --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.DescriptorPoolInlineUniformBlockCreateInfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkDescriptorPoolCreateInfo-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkDescriptorPoolCreateInfo-flags-parameter# @flags@ /must/ be+--     a valid combination of --     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DescriptorPoolCreateFlagBits' --     values ----- -   @pPoolSizes@ /must/ be a valid pointer to an array of---     @poolSizeCount@ valid 'DescriptorPoolSize' structures+-- -   #VUID-VkDescriptorPoolCreateInfo-pPoolSizes-parameter# @pPoolSizes@+--     /must/ be a valid pointer to an array of @poolSizeCount@ valid+--     'DescriptorPoolSize' structures ----- -   @poolSizeCount@ /must/ be greater than @0@+-- -   #VUID-VkDescriptorPoolCreateInfo-poolSizeCount-arraylength#+--     @poolSizeCount@ /must/ be greater than @0@ -- -- = See Also --@@ -2325,11 +2426,13 @@ -- -- == Valid Usage ----- -   Each element of @pSetLayouts@ /must/ not have been created with+-- -   #VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308# Each element of+--     @pSetLayouts@ /must/ not have been created with --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR' --     set ----- -   If any element of @pSetLayouts@ was created with the+-- -   #VUID-VkDescriptorSetAllocateInfo-pSetLayouts-03044# If any element+--     of @pSetLayouts@ was created with the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set, @descriptorPool@ /must/ have been created with the --     'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'@@ -2337,26 +2440,31 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDescriptorSetAllocateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkDescriptorSetAllocateInfo-pNext-pNext# @pNext@ /must/ be+--     @NULL@ or a pointer to a valid instance of --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountAllocateInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkDescriptorSetAllocateInfo-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @descriptorPool@ /must/ be a valid+-- -   #VUID-VkDescriptorSetAllocateInfo-descriptorPool-parameter#+--     @descriptorPool@ /must/ be a valid --     'Vulkan.Core10.Handles.DescriptorPool' handle ----- -   @pSetLayouts@ /must/ be a valid pointer to an array of+-- -   #VUID-VkDescriptorSetAllocateInfo-pSetLayouts-parameter#+--     @pSetLayouts@ /must/ be a valid pointer to an array of --     @descriptorSetCount@ valid --     'Vulkan.Core10.Handles.DescriptorSetLayout' handles ----- -   @descriptorSetCount@ /must/ be greater than @0@+-- -   #VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-arraylength#+--     @descriptorSetCount@ /must/ be greater than @0@ ----- -   Both of @descriptorPool@, and the elements of @pSetLayouts@ /must/---     have been created, allocated, or retrieved from the same+-- -   #VUID-VkDescriptorSetAllocateInfo-commonparent# Both of+--     @descriptorPool@, and the elements of @pSetLayouts@ /must/ have been+--     created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' -- -- = See Also
src/Vulkan/Core10/Device.hs view
@@ -108,6 +108,7 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapFeaturesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRateFeaturesKHR) import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_robustness (PhysicalDeviceImageRobustnessFeaturesEXT)@@ -208,7 +209,7 @@ -- -- == Valid Usage ----- -   All+-- -   #VUID-vkCreateDevice-ppEnabledExtensionNames-01387# All --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required extensions> --     for each extension in the --     'DeviceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be@@ -216,18 +217,18 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid---     'Vulkan.Core10.Handles.PhysicalDevice' handle+-- -   #VUID-vkCreateDevice-physicalDevice-parameter# @physicalDevice@+--     /must/ be a valid 'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'DeviceCreateInfo' structure+-- -   #VUID-vkCreateDevice-pCreateInfo-parameter# @pCreateInfo@ /must/ be+--     a valid pointer to a valid 'DeviceCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateDevice-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pDevice@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateDevice-pDevice-parameter# @pDevice@ /must/ be a valid+--     pointer to a 'Vulkan.Core10.Handles.Device' handle -- -- == Return Codes --@@ -329,23 +330,25 @@ -- -- == Valid Usage ----- -   All child objects created on @device@ /must/ have been destroyed---     prior to destroying @device@+-- -   #VUID-vkDestroyDevice-device-00378# All child objects created on+--     @device@ /must/ have been destroyed prior to destroying @device@ ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDevice-device-00379# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @device@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDevice-device-00380# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @device@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   If @device@ is not @NULL@, @device@ /must/ be a valid---     'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyDevice-device-parameter# If @device@ is not @NULL@,+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyDevice-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure -- -- == Host Synchronization@@ -385,20 +388,22 @@ -- -- == Valid Usage ----- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@+-- -   #VUID-VkDeviceQueueCreateInfo-queueFamilyIndex-00381#+--     @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@ --     returned by --     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties' ----- -   @queueCount@ /must/ be less than or equal to the @queueCount@ member---     of the 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+-- -   #VUID-VkDeviceQueueCreateInfo-queueCount-00382# @queueCount@ /must/+--     be less than or equal to the @queueCount@ member of the+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties' --     structure, as returned by --     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties' --     in the @pQueueFamilyProperties@[queueFamilyIndex] ----- -   Each element of @pQueuePriorities@ /must/ be between @0.0@ and @1.0@---     inclusive+-- -   #VUID-VkDeviceQueueCreateInfo-pQueuePriorities-00383# Each element+--     of @pQueuePriorities@ /must/ be between @0.0@ and @1.0@ inclusive ----- -   If the+-- -   #VUID-VkDeviceQueueCreateInfo-flags-02861# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-protectedMemory protected memory> --     feature is not enabled, the --     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_PROTECTED_BIT'@@ -406,23 +411,27 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDeviceQueueCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkDeviceQueueCreateInfo-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Extensions.VK_EXT_global_priority.DeviceQueueGlobalPriorityCreateInfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkDeviceQueueCreateInfo-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkDeviceQueueCreateInfo-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlagBits' --     values ----- -   @pQueuePriorities@ /must/ be a valid pointer to an array of+-- -   #VUID-VkDeviceQueueCreateInfo-pQueuePriorities-parameter#+--     @pQueuePriorities@ /must/ be a valid pointer to an array of --     @queueCount@ @float@ values ----- -   @queueCount@ /must/ be greater than @0@+-- -   #VUID-VkDeviceQueueCreateInfo-queueCount-arraylength# @queueCount@+--     /must/ be greater than @0@ -- -- = See Also --@@ -514,23 +523,27 @@ -- -- == Valid Usage ----- -   The @queueFamilyIndex@ member of each element of @pQueueCreateInfos@+-- -   #VUID-VkDeviceCreateInfo-queueFamilyIndex-02802# The+--     @queueFamilyIndex@ member of each element of @pQueueCreateInfos@ --     /must/ be unique within @pQueueCreateInfos@, except that two members --     can share the same @queueFamilyIndex@ if one is a protected-capable --     queue and one is not a protected-capable queue ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkDeviceCreateInfo-pNext-00373# If the @pNext@ chain includes+--     a --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2' --     structure, then @pEnabledFeatures@ /must/ be @NULL@ ----- -   @ppEnabledExtensionNames@ /must/ not contain+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-01840#+--     @ppEnabledExtensionNames@ /must/ not contain --     @VK_AMD_negative_viewport_height@ ----- -   @ppEnabledExtensionNames@ /must/ not contain both+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-03328#+--     @ppEnabledExtensionNames@ /must/ not contain both --     @VK_KHR_buffer_device_address@ and @VK_EXT_buffer_device_address@ ----- -   If the @pNext@ chain includes a---     'Vulkan.Core12.PhysicalDeviceVulkan11Features' structure, then it+-- -   #VUID-VkDeviceCreateInfo-pNext-02829# If the @pNext@ chain includes+--     a 'Vulkan.Core12.PhysicalDeviceVulkan11Features' structure, then it --     /must/ not include a --     'Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures', --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',@@ -541,8 +554,8 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures' --     structure ----- -   If the @pNext@ chain includes a---     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then it+-- -   #VUID-VkDeviceCreateInfo-pNext-02830# If the @pNext@ chain includes+--     a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then it --     /must/ not include a --     'Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures', --     'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',@@ -560,38 +573,44 @@ --     'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures' --     structure ----- -   If @ppEnabledExtensions@ contains---     @\"VK_KHR_shader_draw_parameters\"@ and the @pNext@ chain includes a+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensions-04476# If+--     @ppEnabledExtensions@ contains @\"VK_KHR_shader_draw_parameters\"@+--     and the @pNext@ chain includes a --     'Vulkan.Core12.PhysicalDeviceVulkan11Features' structure, then --     'Vulkan.Core12.PhysicalDeviceVulkan11Features'::@shaderDrawParameters@ --     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If @ppEnabledExtensions@ contains @\"VK_KHR_draw_indirect_count\"@---     and the @pNext@ chain includes a+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensions-02831# If+--     @ppEnabledExtensions@ contains @\"VK_KHR_draw_indirect_count\"@ and+--     the @pNext@ chain includes a --     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then --     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@drawIndirectCount@ --     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If @ppEnabledExtensions@ contains+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensions-02832# If+--     @ppEnabledExtensions@ contains --     @\"VK_KHR_sampler_mirror_clamp_to_edge\"@ and the @pNext@ chain --     includes a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, --     then --     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@samplerMirrorClampToEdge@ --     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If @ppEnabledExtensions@ contains @\"VK_EXT_descriptor_indexing\"@---     and the @pNext@ chain includes a+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensions-02833# If+--     @ppEnabledExtensions@ contains @\"VK_EXT_descriptor_indexing\"@ and+--     the @pNext@ chain includes a --     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then --     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@descriptorIndexing@ --     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If @ppEnabledExtensions@ contains @\"VK_EXT_sampler_filter_minmax\"@+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensions-02834# If+--     @ppEnabledExtensions@ contains @\"VK_EXT_sampler_filter_minmax\"@ --     and the @pNext@ chain includes a --     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then --     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@samplerFilterMinmax@ --     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If @ppEnabledExtensions@ contains+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensions-02835# If+--     @ppEnabledExtensions@ contains --     @\"VK_EXT_shader_viewport_index_layer\"@ and the @pNext@ chain --     includes a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, --     then@@ -600,42 +619,43 @@ --     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@shaderOutputLayer@ --     /must/ both be 'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If the @VK_KHR_portability_subset@ extension is included in---     @pProperties@ of+-- -   #VUID-VkDeviceCreateInfo-pProperties-04451# If the+--     @VK_KHR_portability_subset@ extension is included in @pProperties@+--     of --     'Vulkan.Core10.ExtensionDiscovery.enumerateDeviceExtensionProperties', --     @ppEnabledExtensions@ /must/ include \"VK_KHR_portability_subset\". ----- -   If+-- -   #VUID-VkDeviceCreateInfo-shadingRateImage-04478# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shadingRateImage> --     is enabled, --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate> --     /must/ not be enabled ----- -   If+-- -   #VUID-VkDeviceCreateInfo-shadingRateImage-04479# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shadingRateImage> --     is enabled, --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate> --     /must/ not be enabled ----- -   If+-- -   #VUID-VkDeviceCreateInfo-shadingRateImage-04480# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shadingRateImage> --     is enabled, --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate> --     /must/ not be enabled ----- -   If+-- -   #VUID-VkDeviceCreateInfo-fragmentDensityMap-04481# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragmentDensityMap> --     is enabled, --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate> --     /must/ not be enabled ----- -   If+-- -   #VUID-VkDeviceCreateInfo-fragmentDensityMap-04482# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragmentDensityMap> --     is enabled, --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate> --     /must/ not be enabled ----- -   If+-- -   #VUID-VkDeviceCreateInfo-fragmentDensityMap-04483# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragmentDensityMap> --     is enabled, --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>@@ -643,12 +663,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDeviceCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_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+-- -   #VUID-VkDeviceCreateInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceDeviceMemoryReportCreateInfoEXT', --     'Vulkan.Extensions.VK_NV_device_diagnostics_config.DeviceDiagnosticsConfigCreateInfoNV', --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',@@ -681,6 +701,7 @@ --     'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT', --     'Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV', --     'Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsFeaturesNV', --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRateFeaturesKHR', --     'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures', --     'Vulkan.Extensions.VK_EXT_image_robustness.PhysicalDeviceImageRobustnessFeaturesEXT',@@ -730,31 +751,37 @@ --     or --     'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique, with the exception of structures of type+-- -   #VUID-VkDeviceCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique, with the exception of+--     structures of type --     'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceDeviceMemoryReportCreateInfoEXT' --     or --     'Vulkan.Extensions.VK_EXT_private_data.DevicePrivateDataCreateInfoEXT' ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkDeviceCreateInfo-flags-zerobitmask# @flags@ /must/ be @0@ ----- -   @pQueueCreateInfos@ /must/ be a valid pointer to an array of+-- -   #VUID-VkDeviceCreateInfo-pQueueCreateInfos-parameter#+--     @pQueueCreateInfos@ /must/ be a valid pointer to an array of --     @queueCreateInfoCount@ valid 'DeviceQueueCreateInfo' structures ----- -   If @enabledLayerCount@ is not @0@, @ppEnabledLayerNames@ /must/ be a+-- -   #VUID-VkDeviceCreateInfo-ppEnabledLayerNames-parameter# 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@+-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-parameter# If+--     @enabledExtensionCount@ is not @0@, @ppEnabledExtensionNames@ /must/+--     be a valid pointer to an array of @enabledExtensionCount@ --     null-terminated UTF-8 strings ----- -   If @pEnabledFeatures@ is not @NULL@, @pEnabledFeatures@ /must/ be a+-- -   #VUID-VkDeviceCreateInfo-pEnabledFeatures-parameter# If+--     @pEnabledFeatures@ is not @NULL@, @pEnabledFeatures@ /must/ be a --     valid pointer to a valid --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures' --     structure ----- -   @queueCreateInfoCount@ /must/ be greater than @0@+-- -   #VUID-VkDeviceCreateInfo-queueCreateInfoCount-arraylength#+--     @queueCreateInfoCount@ /must/ be greater than @0@ -- -- = See Also --@@ -802,6 +829,7 @@   getNext DeviceCreateInfo{..} = next   extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b   extends _ f+    | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = Just f     | Just Refl <- eqT @e @PhysicalDeviceShaderTerminateInvocationFeaturesKHR = Just f     | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateFeaturesKHR = Just f     | Just Refl <- eqT @e @PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = Just f
src/Vulkan/Core10/DeviceInitialization.hs view
@@ -260,4049 +260,4175 @@ -- -- == Valid Usage ----- -   All---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required extensions>---     for each extension in the---     'InstanceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be---     present in that list------ == Valid Usage (Implicit)------ -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'InstanceCreateInfo' structure------ -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure------ -   @pInstance@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Instance' handle------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'------     -   'Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'------     -   'Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'------     -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER'------ = See Also------ 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',--- 'Vulkan.Core10.Handles.Instance', 'InstanceCreateInfo'-createInstance :: forall a io-                . (Extendss InstanceCreateInfo a, PokeChain a, MonadIO io)-               => -- | @pCreateInfo@ is a pointer to a 'InstanceCreateInfo' structure-                  -- controlling creation of the instance.-                  (InstanceCreateInfo a)-               -> -- | @pAllocator@ controls host memory allocation as described in the-                  -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>-                  -- chapter.-                  ("allocator" ::: Maybe AllocationCallbacks)-               -> io (Instance)-createInstance createInfo allocator = liftIO . evalContT $ do-  vkCreateInstancePtr <- lift $ castFunPtr @_ @(("pCreateInfo" ::: Ptr (SomeStruct InstanceCreateInfo)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pInstance" ::: Ptr (Ptr Instance_T)) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkCreateInstance"#)-  lift $ unless (vkCreateInstancePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateInstance is null" Nothing Nothing-  let vkCreateInstance' = mkVkCreateInstance vkCreateInstancePtr-  pCreateInfo <- ContT $ withCStruct (createInfo)-  pAllocator <- case (allocator) of-    Nothing -> pure nullPtr-    Just j -> ContT $ withCStruct (j)-  pPInstance <- ContT $ bracket (callocBytes @(Ptr Instance_T) 8) free-  r <- lift $ vkCreateInstance' (forgetExtensions pCreateInfo) pAllocator (pPInstance)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pInstance <- lift $ peek @(Ptr Instance_T) pPInstance-  pInstance' <- lift $ (\h -> Instance h <$> initInstanceCmds h) pInstance-  pure $ (pInstance')---- | A convenience wrapper to make a compatible pair of calls to--- 'createInstance' and 'destroyInstance'------ To ensure that 'destroyInstance' is always called: pass--- 'Control.Exception.bracket' (or the allocate function from your--- favourite resource management library) as the first argument.--- To just extract the pair pass '(,)' as the first argument.----withInstance :: forall a io r . (Extendss InstanceCreateInfo a, PokeChain a, MonadIO io) => InstanceCreateInfo a -> Maybe AllocationCallbacks -> (io (Instance) -> ((Instance) -> io ()) -> r) -> r-withInstance pCreateInfo pAllocator b =-  b (createInstance pCreateInfo pAllocator)-    (\(o0) -> destroyInstance o0 pAllocator)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkDestroyInstance-  :: FunPtr (Ptr Instance_T -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> Ptr AllocationCallbacks -> IO ()---- | vkDestroyInstance - Destroy an instance of Vulkan------ == Valid Usage------ -   All child objects created using @instance@ /must/ have been---     destroyed prior to destroying @instance@------ -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were---     provided when @instance@ was created, a compatible set of callbacks---     /must/ be provided here------ -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were---     provided when @instance@ was created, @pAllocator@ /must/ be @NULL@------ == Valid Usage (Implicit)------ -   If @instance@ is not @NULL@, @instance@ /must/ be a valid---     'Vulkan.Core10.Handles.Instance' handle------ -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure------ == Host Synchronization------ -   Host access to @instance@ /must/ be externally synchronized------ -   Host access to all 'Vulkan.Core10.Handles.PhysicalDevice' objects---     enumerated from @instance@ /must/ be externally synchronized------ = See Also------ 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',--- 'Vulkan.Core10.Handles.Instance'-destroyInstance :: forall io-                 . (MonadIO io)-                => -- | @instance@ is the handle of the instance to destroy.-                   Instance-                -> -- | @pAllocator@ controls host memory allocation as described in the-                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>-                   -- chapter.-                   ("allocator" ::: Maybe AllocationCallbacks)-                -> io ()-destroyInstance instance' allocator = liftIO . evalContT $ do-  let vkDestroyInstancePtr = pVkDestroyInstance (instanceCmds (instance' :: Instance))-  lift $ unless (vkDestroyInstancePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyInstance is null" Nothing Nothing-  let vkDestroyInstance' = mkVkDestroyInstance vkDestroyInstancePtr-  pAllocator <- case (allocator) of-    Nothing -> pure nullPtr-    Just j -> ContT $ withCStruct (j)-  lift $ vkDestroyInstance' (instanceHandle (instance')) pAllocator-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkEnumeratePhysicalDevices-  :: FunPtr (Ptr Instance_T -> Ptr Word32 -> Ptr (Ptr PhysicalDevice_T) -> IO Result) -> Ptr Instance_T -> Ptr Word32 -> Ptr (Ptr PhysicalDevice_T) -> IO Result---- | vkEnumeratePhysicalDevices - Enumerates the physical devices accessible--- to a Vulkan instance------ = 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, 'Vulkan.Core10.Enums.Result.INCOMPLETE' will--- be returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate--- that not all the available physical devices were returned.------ == Valid Usage (Implicit)------ -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' 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@---     'Vulkan.Core10.Handles.PhysicalDevice' handles------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'------ = See Also------ 'Vulkan.Core10.Handles.Instance', 'Vulkan.Core10.Handles.PhysicalDevice'-enumeratePhysicalDevices :: forall io-                          . (MonadIO io)-                         => -- | @instance@ is a handle to a Vulkan instance previously created with-                            -- 'createInstance'.-                            Instance-                         -> io (Result, ("physicalDevices" ::: Vector PhysicalDevice))-enumeratePhysicalDevices instance' = liftIO . evalContT $ do-  let cmds = instanceCmds (instance' :: Instance)-  let vkEnumeratePhysicalDevicesPtr = pVkEnumeratePhysicalDevices cmds-  lift $ unless (vkEnumeratePhysicalDevicesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumeratePhysicalDevices is null" Nothing Nothing-  let vkEnumeratePhysicalDevices' = mkVkEnumeratePhysicalDevices vkEnumeratePhysicalDevicesPtr-  let instance'' = instanceHandle (instance')-  pPPhysicalDeviceCount <- ContT $ bracket (callocBytes @Word32 4) free-  r <- lift $ vkEnumeratePhysicalDevices' instance'' (pPPhysicalDeviceCount) (nullPtr)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pPhysicalDeviceCount <- lift $ peek @Word32 pPPhysicalDeviceCount-  pPPhysicalDevices <- ContT $ bracket (callocBytes @(Ptr PhysicalDevice_T) ((fromIntegral (pPhysicalDeviceCount)) * 8)) free-  r' <- lift $ vkEnumeratePhysicalDevices' instance'' (pPPhysicalDeviceCount) (pPPhysicalDevices)-  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))-  pPhysicalDeviceCount' <- lift $ peek @Word32 pPPhysicalDeviceCount-  pPhysicalDevices' <- lift $ generateM (fromIntegral (pPhysicalDeviceCount')) (\i -> do-    pPhysicalDevicesElem <- peek @(Ptr PhysicalDevice_T) ((pPPhysicalDevices `advancePtrBytes` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)))-    pure $ (\h -> PhysicalDevice h cmds ) pPhysicalDevicesElem)-  pure $ ((r'), pPhysicalDevices')---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetDeviceProcAddr-  :: FunPtr (Ptr Device_T -> Ptr CChar -> IO PFN_vkVoidFunction) -> Ptr Device_T -> Ptr CChar -> IO PFN_vkVoidFunction---- | vkGetDeviceProcAddr - Return a function pointer for a command------ = Parameters------ The table below defines the various use cases for 'getDeviceProcAddr'--- and expected return value for each case.------ = Description------ The returned function pointer is of type--- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be cast to--- the type of the command being queried before use. 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@               | *1                   | undefined             |--- +----------------------+----------------------+-----------------------+--- | invalid device       | *1                   | undefined             |--- +----------------------+----------------------+-----------------------+--- | device               | @NULL@               | undefined             |--- +----------------------+----------------------+-----------------------+--- | device               | core device-level    | fp2                   |--- |                      | Vulkan command       |                       |--- +----------------------+----------------------+-----------------------+--- | device               | enabled extension    | fp2                   |--- |                      | device-level         |                       |--- |                      | commands             |                       |--- +----------------------+----------------------+-----------------------+--- | any other case, not  | @NULL@               |                       |--- | covered above        |                      |                       |--- +----------------------+----------------------+-----------------------+------ 'getDeviceProcAddr' behavior------ [1]---     \"*\" means any representable value for the parameter (including---     valid values, invalid values, and @NULL@).------ [2]---     The returned function pointer /must/ only be called with a---     dispatchable object (the first parameter) that is @device@ or a---     child of @device@ e.g. 'Vulkan.Core10.Handles.Device',---     'Vulkan.Core10.Handles.Queue', or---     'Vulkan.Core10.Handles.CommandBuffer'.------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction',--- 'Vulkan.Core10.Handles.Device'-getDeviceProcAddr :: forall io-                   . (MonadIO io)-                  => -- | @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle-                     Device-                  -> -- | @pName@ /must/ be a null-terminated UTF-8 string-                     ("name" ::: ByteString)-                  -> io (PFN_vkVoidFunction)-getDeviceProcAddr device name = liftIO . evalContT $ do-  let vkGetDeviceProcAddrPtr = pVkGetDeviceProcAddr (deviceCmds (device :: Device))-  lift $ unless (vkGetDeviceProcAddrPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceProcAddr is null" Nothing Nothing-  let vkGetDeviceProcAddr' = mkVkGetDeviceProcAddr vkGetDeviceProcAddrPtr-  pName <- ContT $ useAsCString (name)-  r <- lift $ vkGetDeviceProcAddr' (deviceHandle (device)) pName-  pure $ (r)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetInstanceProcAddr-  :: FunPtr (Ptr Instance_T -> Ptr CChar -> IO PFN_vkVoidFunction) -> Ptr Instance_T -> Ptr CChar -> IO PFN_vkVoidFunction---- | vkGetInstanceProcAddr - Return a function pointer for a command------ = Description------ 'getInstanceProcAddr' 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 'getInstanceProcAddr'--- and expected return value (“fp” is “function pointer”) for each case.------ The returned function pointer is of type--- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be cast to--- the type of the command being queried before use.------ +----------------------+-------------------------------------------------------------------------+-----------------------+--- | @instance@           | @pName@                                                                 | return value          |--- +======================+=========================================================================+=======================+--- | *1                   | @NULL@                                                                  | undefined             |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | invalid non-@NULL@   | *1                                                                      | undefined             |--- | instance             |                                                                         |                       |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | @NULL@               | 'getInstanceProcAddr'                                                   | fp4                   |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | @NULL@               | 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'           | fp                    |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | @NULL@               | 'Vulkan.Core10.ExtensionDiscovery.enumerateInstanceExtensionProperties' | fp                    |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | @NULL@               | 'Vulkan.Core10.LayerDiscovery.enumerateInstanceLayerProperties'         | fp                    |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | @NULL@               | 'createInstance'                                                        | fp                    |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | instance             | core Vulkan command                                                     | fp2                   |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | instance             | enabled instance extension commands for @instance@                      | fp2                   |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | instance             | available device extension3 commands for @instance@                     | fp2                   |--- +----------------------+-------------------------------------------------------------------------+-----------------------+--- | any other case, not  | @NULL@                                                                  |                       |--- | covered above        |                                                                         |                       |--- +----------------------+-------------------------------------------------------------------------+-----------------------+------ 'getInstanceProcAddr' behavior------ [1]---     \"*\" means any representable value for the parameter (including---     valid values, invalid values, and @NULL@).------ [2]---     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. 'Vulkan.Core10.Handles.Instance',---     'Vulkan.Core10.Handles.PhysicalDevice',---     'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Queue', or---     'Vulkan.Core10.Handles.CommandBuffer'.------ [3]---     An “available device extension” is a device extension supported by---     any physical device enumerated by @instance@.------ [4]---     Starting with Vulkan 1.2, 'getInstanceProcAddr' can resolve itself---     with a @NULL@ instance pointer.------ == Valid Usage (Implicit)------ -   If @instance@ is not @NULL@, @instance@ /must/ be a valid---     'Vulkan.Core10.Handles.Instance' handle------ -   @pName@ /must/ be a null-terminated UTF-8 string------ = See Also------ 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction',--- 'Vulkan.Core10.Handles.Instance'-getInstanceProcAddr :: forall io-                     . (MonadIO io)-                    => -- | @instance@ is the instance that the function pointer will be compatible-                       -- with, or @NULL@ for commands not dependent on any instance.-                       Instance-                    -> -- | @pName@ is the name of the command to obtain.-                       ("name" ::: ByteString)-                    -> io (PFN_vkVoidFunction)-getInstanceProcAddr instance' name = liftIO . evalContT $ do-  let vkGetInstanceProcAddrPtr = pVkGetInstanceProcAddr (instanceCmds (instance' :: Instance))-  lift $ unless (vkGetInstanceProcAddrPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetInstanceProcAddr is null" Nothing Nothing-  let vkGetInstanceProcAddr' = mkVkGetInstanceProcAddr vkGetInstanceProcAddrPtr-  pName <- ContT $ useAsCString (name)-  r <- lift $ vkGetInstanceProcAddr' (instanceHandle (instance')) pName-  pure $ (r)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetPhysicalDeviceProperties-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceProperties -> IO ()---- | vkGetPhysicalDeviceProperties - Returns properties of a physical device------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceProperties'-getPhysicalDeviceProperties :: forall io-                             . (MonadIO io)-                            => -- | @physicalDevice@ is the handle to the physical device whose properties-                               -- will be queried.-                               ---                               -- @physicalDevice@ /must/ be a valid-                               -- 'Vulkan.Core10.Handles.PhysicalDevice' handle-                               PhysicalDevice-                            -> io (PhysicalDeviceProperties)-getPhysicalDeviceProperties physicalDevice = liftIO . evalContT $ do-  let vkGetPhysicalDevicePropertiesPtr = pVkGetPhysicalDeviceProperties (instanceCmds (physicalDevice :: PhysicalDevice))-  lift $ unless (vkGetPhysicalDevicePropertiesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceProperties is null" Nothing Nothing-  let vkGetPhysicalDeviceProperties' = mkVkGetPhysicalDeviceProperties vkGetPhysicalDevicePropertiesPtr-  pPProperties <- ContT (withZeroCStruct @PhysicalDeviceProperties)-  lift $ vkGetPhysicalDeviceProperties' (physicalDeviceHandle (physicalDevice)) (pPProperties)-  pProperties <- lift $ peekCStruct @PhysicalDeviceProperties pPProperties-  pure $ (pProperties)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetPhysicalDeviceQueueFamilyProperties-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr QueueFamilyProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr QueueFamilyProperties -> IO ()---- | vkGetPhysicalDeviceQueueFamilyProperties - Reports properties of the--- queues of the specified physical device------ = Description------ If @pQueueFamilyProperties@ is @NULL@, then the number of queue families--- available is returned in @pQueueFamilyPropertyCount@. Implementations--- /must/ support at least one queue family. 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---     'Vulkan.Core10.Handles.PhysicalDevice' 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@---     'QueueFamilyProperties' structures------ = See Also------ 'Vulkan.Core10.Handles.PhysicalDevice', 'QueueFamilyProperties'-getPhysicalDeviceQueueFamilyProperties :: forall io-                                        . (MonadIO io)-                                       => -- | @physicalDevice@ is the handle to the physical device whose properties-                                          -- will be queried.-                                          PhysicalDevice-                                       -> io (("queueFamilyProperties" ::: Vector QueueFamilyProperties))-getPhysicalDeviceQueueFamilyProperties physicalDevice = liftIO . evalContT $ do-  let vkGetPhysicalDeviceQueueFamilyPropertiesPtr = pVkGetPhysicalDeviceQueueFamilyProperties (instanceCmds (physicalDevice :: PhysicalDevice))-  lift $ unless (vkGetPhysicalDeviceQueueFamilyPropertiesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceQueueFamilyProperties is null" Nothing Nothing-  let vkGetPhysicalDeviceQueueFamilyProperties' = mkVkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyPropertiesPtr-  let physicalDevice' = physicalDeviceHandle (physicalDevice)-  pPQueueFamilyPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free-  lift $ vkGetPhysicalDeviceQueueFamilyProperties' physicalDevice' (pPQueueFamilyPropertyCount) (nullPtr)-  pQueueFamilyPropertyCount <- lift $ peek @Word32 pPQueueFamilyPropertyCount-  pPQueueFamilyProperties <- ContT $ bracket (callocBytes @QueueFamilyProperties ((fromIntegral (pQueueFamilyPropertyCount)) * 24)) free-  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPQueueFamilyProperties `advancePtrBytes` (i * 24) :: Ptr QueueFamilyProperties) . ($ ())) [0..(fromIntegral (pQueueFamilyPropertyCount)) - 1]-  lift $ vkGetPhysicalDeviceQueueFamilyProperties' physicalDevice' (pPQueueFamilyPropertyCount) ((pPQueueFamilyProperties))-  pQueueFamilyPropertyCount' <- lift $ peek @Word32 pPQueueFamilyPropertyCount-  pQueueFamilyProperties' <- lift $ generateM (fromIntegral (pQueueFamilyPropertyCount')) (\i -> peekCStruct @QueueFamilyProperties (((pPQueueFamilyProperties) `advancePtrBytes` (24 * (i)) :: Ptr QueueFamilyProperties)))-  pure $ (pQueueFamilyProperties')---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetPhysicalDeviceMemoryProperties-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceMemoryProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceMemoryProperties -> IO ()---- | vkGetPhysicalDeviceMemoryProperties - Reports memory information for the--- specified physical device------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceMemoryProperties'-getPhysicalDeviceMemoryProperties :: forall io-                                   . (MonadIO io)-                                  => -- | @physicalDevice@ is the handle to the device to query.-                                     ---                                     -- @physicalDevice@ /must/ be a valid-                                     -- 'Vulkan.Core10.Handles.PhysicalDevice' handle-                                     PhysicalDevice-                                  -> io (PhysicalDeviceMemoryProperties)-getPhysicalDeviceMemoryProperties physicalDevice = liftIO . evalContT $ do-  let vkGetPhysicalDeviceMemoryPropertiesPtr = pVkGetPhysicalDeviceMemoryProperties (instanceCmds (physicalDevice :: PhysicalDevice))-  lift $ unless (vkGetPhysicalDeviceMemoryPropertiesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceMemoryProperties is null" Nothing Nothing-  let vkGetPhysicalDeviceMemoryProperties' = mkVkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryPropertiesPtr-  pPMemoryProperties <- ContT (withZeroCStruct @PhysicalDeviceMemoryProperties)-  lift $ vkGetPhysicalDeviceMemoryProperties' (physicalDeviceHandle (physicalDevice)) (pPMemoryProperties)-  pMemoryProperties <- lift $ peekCStruct @PhysicalDeviceMemoryProperties pPMemoryProperties-  pure $ (pMemoryProperties)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetPhysicalDeviceFeatures-  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceFeatures -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceFeatures -> IO ()---- | vkGetPhysicalDeviceFeatures - Reports capabilities of a physical device------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceFeatures'-getPhysicalDeviceFeatures :: forall io-                           . (MonadIO io)-                          => -- | @physicalDevice@ is the physical device from which to query the-                             -- supported features.-                             ---                             -- @physicalDevice@ /must/ be a valid-                             -- 'Vulkan.Core10.Handles.PhysicalDevice' handle-                             PhysicalDevice-                          -> io (PhysicalDeviceFeatures)-getPhysicalDeviceFeatures physicalDevice = liftIO . evalContT $ do-  let vkGetPhysicalDeviceFeaturesPtr = pVkGetPhysicalDeviceFeatures (instanceCmds (physicalDevice :: PhysicalDevice))-  lift $ unless (vkGetPhysicalDeviceFeaturesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceFeatures is null" Nothing Nothing-  let vkGetPhysicalDeviceFeatures' = mkVkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeaturesPtr-  pPFeatures <- ContT (withZeroCStruct @PhysicalDeviceFeatures)-  lift $ vkGetPhysicalDeviceFeatures' (physicalDeviceHandle (physicalDevice)) (pPFeatures)-  pFeatures <- lift $ peekCStruct @PhysicalDeviceFeatures pPFeatures-  pure $ (pFeatures)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetPhysicalDeviceFormatProperties-  :: FunPtr (Ptr PhysicalDevice_T -> Format -> Ptr FormatProperties -> IO ()) -> Ptr PhysicalDevice_T -> Format -> Ptr FormatProperties -> IO ()---- | vkGetPhysicalDeviceFormatProperties - Lists physical device’s format--- capabilities------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Core10.Enums.Format.Format', 'FormatProperties',--- 'Vulkan.Core10.Handles.PhysicalDevice'-getPhysicalDeviceFormatProperties :: forall io-                                   . (MonadIO io)-                                  => -- | @physicalDevice@ is the physical device from which to query the format-                                     -- properties.-                                     ---                                     -- @physicalDevice@ /must/ be a valid-                                     -- 'Vulkan.Core10.Handles.PhysicalDevice' handle-                                     PhysicalDevice-                                  -> -- | @format@ is the format whose properties are queried.-                                     ---                                     -- @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value-                                     Format-                                  -> io (FormatProperties)-getPhysicalDeviceFormatProperties physicalDevice format = liftIO . evalContT $ do-  let vkGetPhysicalDeviceFormatPropertiesPtr = pVkGetPhysicalDeviceFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice))-  lift $ unless (vkGetPhysicalDeviceFormatPropertiesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceFormatProperties is null" Nothing Nothing-  let vkGetPhysicalDeviceFormatProperties' = mkVkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatPropertiesPtr-  pPFormatProperties <- ContT (withZeroCStruct @FormatProperties)-  lift $ vkGetPhysicalDeviceFormatProperties' (physicalDeviceHandle (physicalDevice)) (format) (pPFormatProperties)-  pFormatProperties <- lift $ peekCStruct @FormatProperties pPFormatProperties-  pure $ (pFormatProperties)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetPhysicalDeviceImageFormatProperties-  :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> Ptr ImageFormatProperties -> IO Result) -> Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> Ptr ImageFormatProperties -> IO Result---- | vkGetPhysicalDeviceImageFormatProperties - Lists physical device’s image--- format capabilities------ = Description------ The @format@, @type@, @tiling@, @usage@, and @flags@ parameters--- correspond to parameters that would be consumed by--- 'Vulkan.Core10.Image.createImage' (as members of--- 'Vulkan.Core10.Image.ImageCreateInfo').------ 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 'getPhysicalDeviceImageFormatProperties' returns--- 'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'.------ The limitations on an image format that are reported by--- 'getPhysicalDeviceImageFormatProperties' have the following property: if--- @usage1@ and @usage2@ of type--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags' are such that--- the bits set in @usage1@ are a subset of the bits set in @usage2@, and--- @flags1@ and @flags2@ of type--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags' 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@.------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'------ = See Also------ 'Vulkan.Core10.Enums.Format.Format',--- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',--- 'ImageFormatProperties', 'Vulkan.Core10.Enums.ImageTiling.ImageTiling',--- 'Vulkan.Core10.Enums.ImageType.ImageType',--- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',--- 'Vulkan.Core10.Handles.PhysicalDevice'-getPhysicalDeviceImageFormatProperties :: forall io-                                        . (MonadIO io)-                                       => -- | @physicalDevice@ is the physical device from which to query the image-                                          -- capabilities.-                                          ---                                          -- @physicalDevice@ /must/ be a valid-                                          -- 'Vulkan.Core10.Handles.PhysicalDevice' handle-                                          PhysicalDevice-                                       -> -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' value specifying the-                                          -- image format, corresponding to-                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@format@.-                                          ---                                          -- @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value-                                          Format-                                       -> -- | @type@ is a 'Vulkan.Core10.Enums.ImageType.ImageType' value specifying-                                          -- the image type, corresponding to-                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.-                                          ---                                          -- @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType' value-                                          ImageType-                                       -> -- | @tiling@ is a 'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value-                                          -- specifying the image tiling, corresponding to-                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.-                                          ---                                          -- @tiling@ /must/ not be-                                          -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'.-                                          -- (Use-                                          -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'-                                          -- instead)-                                          ---                                          -- @tiling@ /must/ be a valid 'Vulkan.Core10.Enums.ImageTiling.ImageTiling'-                                          -- value-                                          ImageTiling-                                       -> -- | @usage@ is a bitmask of-                                          -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' specifying-                                          -- the intended usage of the image, corresponding to-                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@.-                                          ---                                          -- @usage@ /must/ be a valid combination of-                                          -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values-                                          ---                                          -- @usage@ /must/ not be @0@-                                          ImageUsageFlags-                                       -> -- | @flags@ is a bitmask of-                                          -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' specifying-                                          -- additional parameters of the image, corresponding to-                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@.-                                          ---                                          -- @flags@ /must/ be a valid combination of-                                          -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values-                                          ImageCreateFlags-                                       -> io (ImageFormatProperties)-getPhysicalDeviceImageFormatProperties physicalDevice format type' tiling usage flags = liftIO . evalContT $ do-  let vkGetPhysicalDeviceImageFormatPropertiesPtr = pVkGetPhysicalDeviceImageFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice))-  lift $ unless (vkGetPhysicalDeviceImageFormatPropertiesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceImageFormatProperties is null" Nothing Nothing-  let vkGetPhysicalDeviceImageFormatProperties' = mkVkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatPropertiesPtr-  pPImageFormatProperties <- ContT (withZeroCStruct @ImageFormatProperties)-  r <- lift $ vkGetPhysicalDeviceImageFormatProperties' (physicalDeviceHandle (physicalDevice)) (format) (type') (tiling) (usage) (flags) (pPImageFormatProperties)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pImageFormatProperties <- lift $ peekCStruct @ImageFormatProperties pPImageFormatProperties-  pure $ (pImageFormatProperties)----- | VkPhysicalDeviceProperties - Structure specifying physical device--- properties------ = Description------ Note------ The value of @apiVersion@ /may/ be different than the version returned--- by 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'; either--- higher or lower. In such cases, the application /must/ not use--- functionality that exceeds the version of Vulkan associated with a given--- object. The @pApiVersion@ parameter returned by--- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion' is the--- version associated with a 'Vulkan.Core10.Handles.Instance' and its--- children, except for a 'Vulkan.Core10.Handles.PhysicalDevice' and its--- children. 'PhysicalDeviceProperties'::@apiVersion@ is the version--- associated with a 'Vulkan.Core10.Handles.PhysicalDevice' and its--- children.------ 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--- 'Vulkan.Core10.Handles.PhysicalDevice' 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--- <https://pcisig.com/membership/member-companies PCI vendor ID>, 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--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vulkan-styleguide Vulkan Documentation and Extensions: Procedures and Conventions>--- 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. Khronos vendor IDs are symbolically defined--- in the 'Vulkan.Core10.Enums.VendorId.VendorId' type.------ The vendor is also responsible for the value returned in @deviceID@. If--- the implementation is driven primarily by a--- <https://pcisig.com/ PCI device> with a--- <https://pcisig.com/ PCI device ID>, 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------ 'PhysicalDeviceLimits',--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',--- 'PhysicalDeviceSparseProperties',--- 'Vulkan.Core10.Enums.PhysicalDeviceType.PhysicalDeviceType',--- 'getPhysicalDeviceProperties'-data PhysicalDeviceProperties = PhysicalDeviceProperties-  { -- | @apiVersion@ is the version of Vulkan supported by the device, encoded-    -- as described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.-    apiVersion :: Word32-  , -- | @driverVersion@ is the vendor-specified version of the driver.-    driverVersion :: Word32-  , -- | @vendorID@ is a unique identifier for the /vendor/ (see below) of the-    -- physical device.-    vendorID :: Word32-  , -- | @deviceID@ is a unique identifier for the physical device among devices-    -- available from the vendor.-    deviceID :: Word32-  , -- | @deviceType@ is a-    -- 'Vulkan.Core10.Enums.PhysicalDeviceType.PhysicalDeviceType' specifying-    -- the type of device.-    deviceType :: PhysicalDeviceType-  , -- | @deviceName@ is an array of-    -- 'Vulkan.Core10.APIConstants.MAX_PHYSICAL_DEVICE_NAME_SIZE' @char@-    -- containing a null-terminated UTF-8 string which is the name of the-    -- device.-    deviceName :: ByteString-  , -- | @pipelineCacheUUID@ is an array of-    -- 'Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values representing a-    -- universally unique identifier for the device.-    pipelineCacheUUID :: ByteString-  , -- | @limits@ is the 'PhysicalDeviceLimits' structure specifying-    -- device-specific limits of the physical device. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits Limits>-    -- for details.-    limits :: PhysicalDeviceLimits-  , -- | @sparseProperties@ is the 'PhysicalDeviceSparseProperties' structure-    -- specifying various sparse related properties of the physical device. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-physicalprops Sparse Properties>-    -- for details.-    sparseProperties :: PhysicalDeviceSparseProperties-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PhysicalDeviceProperties)-#endif-deriving instance Show PhysicalDeviceProperties--instance ToCStruct PhysicalDeviceProperties where-  withCStruct x f = allocaBytesAligned 824 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PhysicalDeviceProperties{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (apiVersion)-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (driverVersion)-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (vendorID)-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (deviceID)-    lift $ poke ((p `plusPtr` 16 :: Ptr PhysicalDeviceType)) (deviceType)-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))) (deviceName)-    lift $ pokeFixedLengthByteString ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8))) (pipelineCacheUUID)-    ContT $ pokeCStruct ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits)) (limits) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties)) (sparseProperties) . ($ ())-    lift $ f-  cStructSize = 824-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 16 :: Ptr PhysicalDeviceType)) (zero)-    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))) (mempty)-    lift $ pokeFixedLengthByteString ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)-    ContT $ pokeCStruct ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties)) (zero) . ($ ())-    lift $ f--instance FromCStruct PhysicalDeviceProperties where-  peekCStruct p = do-    apiVersion <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))-    driverVersion <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    vendorID <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))-    deviceID <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))-    deviceType <- peek @PhysicalDeviceType ((p `plusPtr` 16 :: Ptr PhysicalDeviceType))-    deviceName <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))))-    pipelineCacheUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8)))-    limits <- peekCStruct @PhysicalDeviceLimits ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits))-    sparseProperties <- peekCStruct @PhysicalDeviceSparseProperties ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties))-    pure $ PhysicalDeviceProperties-             apiVersion driverVersion vendorID deviceID deviceType deviceName pipelineCacheUUID limits sparseProperties--instance Zero PhysicalDeviceProperties where-  zero = PhysicalDeviceProperties-           zero-           zero-           zero-           zero-           zero-           mempty-           mempty-           zero-           zero----- | VkApplicationInfo - Structure specifying application info------ = Description------ Vulkan 1.0 implementations were required to return--- 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER' if @apiVersion@--- was larger than 1.0. Implementations that support Vulkan 1.1 or later--- /must/ not return 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER'--- for any value of @apiVersion@.------ Note------ Because Vulkan 1.0 implementations /may/ fail with--- 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER', applications--- /should/ determine the version of Vulkan available before calling--- 'createInstance'. If the 'getInstanceProcAddr' returns @NULL@ for--- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion', it is a--- Vulkan 1.0 implementation. Otherwise, the application /can/ call--- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion' to--- determine the version of Vulkan.------ As long as the instance supports at least Vulkan 1.1, an application--- /can/ use different versions of Vulkan with an instance than it does--- with a device or physical device.------ Note------ The Khronos validation layers will treat @apiVersion@ as the highest API--- version the application targets, and will validate API usage against the--- minimum of that version and the implementation version (instance or--- device, depending on context). If an application tries to use--- functionality from a greater version than this, a validation error will--- be triggered.------ For example, if the instance supports Vulkan 1.1 and three physical--- devices support Vulkan 1.0, Vulkan 1.1, and Vulkan 1.2, respectively,--- and if the application sets @apiVersion@ to 1.2, the application /can/--- use the following versions of Vulkan:------ -   Vulkan 1.0 /can/ be used with the instance and with all physical---     devices.------ -   Vulkan 1.1 /can/ be used with the instance and with the physical---     devices that support Vulkan 1.1 and Vulkan 1.2.------ -   Vulkan 1.2 /can/ be used with the physical device that supports---     Vulkan 1.2.------ If we modify the above example so that the application sets @apiVersion@--- to 1.1, then the application /must/ not use Vulkan 1.2 functionality on--- the physical device that supports Vulkan 1.2.------ Implicit layers /must/ be disabled if they do not support a version at--- least as high as @apiVersion@. See the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#LoaderAndLayerInterface Vulkan Loader Specification and Architecture Overview>--- document for additional information.------ Note------ Providing a @NULL@ 'InstanceCreateInfo'::@pApplicationInfo@ or providing--- an @apiVersion@ of 0 is equivalent to providing an @apiVersion@ of--- @VK_MAKE_VERSION(1,0,0)@.------ == Valid Usage------ -   If @apiVersion@ is not @0@, then it /must/ be greater or equal to---     'Vulkan.Core10.API_VERSION_1_0'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.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------ 'InstanceCreateInfo', 'Vulkan.Core10.Enums.StructureType.StructureType'-data ApplicationInfo = ApplicationInfo-  { -- | @pApplicationName@ is @NULL@ or is a pointer to a null-terminated UTF-8-    -- string containing the name of the application.-    applicationName :: Maybe ByteString-  , -- | @applicationVersion@ is an unsigned integer variable containing the-    -- developer-supplied version number of the application.-    applicationVersion :: 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.-    engineName :: Maybe ByteString-  , -- | @engineVersion@ is an unsigned integer variable containing the-    -- developer-supplied version number of the engine used to create the-    -- application.-    engineVersion :: Word32-  , -- | @apiVersion@ /must/ be the highest version of Vulkan that the-    -- application is designed to use, encoded as described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.-    -- 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@.-    apiVersion :: Word32-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ApplicationInfo)-#endif-deriving instance Show ApplicationInfo--instance ToCStruct ApplicationInfo where-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ApplicationInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_APPLICATION_INFO)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    pApplicationName'' <- case (applicationName) of-      Nothing -> pure nullPtr-      Just j -> ContT $ useAsCString (j)-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pApplicationName''-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (applicationVersion)-    pEngineName'' <- case (engineName) of-      Nothing -> pure nullPtr-      Just j -> ContT $ useAsCString (j)-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pEngineName''-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (engineVersion)-    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (apiVersion)-    lift $ f-  cStructSize = 48-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_APPLICATION_INFO)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)-    f--instance FromCStruct ApplicationInfo where-  peekCStruct p = do-    pApplicationName <- peek @(Ptr CChar) ((p `plusPtr` 16 :: Ptr (Ptr CChar)))-    pApplicationName' <- maybePeek (\j -> packCString  (j)) pApplicationName-    applicationVersion <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))-    pEngineName <- peek @(Ptr CChar) ((p `plusPtr` 32 :: Ptr (Ptr CChar)))-    pEngineName' <- maybePeek (\j -> packCString  (j)) pEngineName-    engineVersion <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))-    apiVersion <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))-    pure $ ApplicationInfo-             pApplicationName' applicationVersion pEngineName' engineVersion apiVersion--instance Zero ApplicationInfo where-  zero = ApplicationInfo-           Nothing-           zero-           Nothing-           zero-           zero----- | VkInstanceCreateInfo - Structure specifying parameters of a newly--- created instance------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.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---     'Vulkan.Extensions.VK_EXT_debug_report.DebugReportCallbackCreateInfoEXT',---     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT',---     'Vulkan.Extensions.VK_EXT_validation_features.ValidationFeaturesEXT',---     or 'Vulkan.Extensions.VK_EXT_validation_flags.ValidationFlagsEXT'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique, with the exception of structures of type---     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT'------ -   @flags@ /must/ be @0@------ -   If @pApplicationInfo@ is not @NULL@, @pApplicationInfo@ /must/ be a---     valid pointer to a valid 'ApplicationInfo' 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------ 'ApplicationInfo',--- 'Vulkan.Core10.Enums.InstanceCreateFlags.InstanceCreateFlags',--- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createInstance'-data InstanceCreateInfo (es :: [Type]) = InstanceCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is reserved for future use.-    flags :: InstanceCreateFlags-  , -- | @pApplicationInfo@ is @NULL@ or a pointer to a 'ApplicationInfo'-    -- structure. If not @NULL@, this information helps implementations-    -- recognize behavior inherent to classes of applications.-    -- 'ApplicationInfo' is defined in detail below.-    applicationInfo :: Maybe ApplicationInfo-  , -- | @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. The layers are loaded in the order they are-    -- listed in this array, with the first array element being the closest to-    -- the application, and the last array element being the closest to the-    -- driver. See the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers>-    -- section for further details.-    enabledLayerNames :: Vector ByteString-  , -- | @ppEnabledExtensionNames@ is a pointer to an array of-    -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the-    -- names of extensions to enable.-    enabledExtensionNames :: Vector ByteString-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (InstanceCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (InstanceCreateInfo es)--instance Extensible InstanceCreateInfo where-  extensibleType = STRUCTURE_TYPE_INSTANCE_CREATE_INFO-  setNext x next = x{next = next}-  getNext InstanceCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends InstanceCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @DebugUtilsMessengerCreateInfoEXT = Just f-    | Just Refl <- eqT @e @ValidationFeaturesEXT = Just f-    | Just Refl <- eqT @e @ValidationFlagsEXT = Just f-    | Just Refl <- eqT @e @DebugReportCallbackCreateInfoEXT = Just f-    | otherwise = Nothing--instance (Extendss InstanceCreateInfo es, PokeChain es) => ToCStruct (InstanceCreateInfo es) where-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p InstanceCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INSTANCE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr InstanceCreateFlags)) (flags)-    pApplicationInfo'' <- case (applicationInfo) of-      Nothing -> pure nullPtr-      Just j -> ContT $ withCStruct (j)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ApplicationInfo))) pApplicationInfo''-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledLayerNames)) :: Word32))-    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledLayerNames)) * 8) 8-    Data.Vector.imapM_ (\i e -> do-      ppEnabledLayerNames'' <- ContT $ useAsCString (e)-      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (enabledLayerNames)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledExtensionNames)) :: Word32))-    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledExtensionNames)) * 8) 8-    Data.Vector.imapM_ (\i e -> do-      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)-      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (enabledExtensionNames)-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')-    lift $ f-  cStructSize = 64-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INSTANCE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8-    Data.Vector.imapM_ (\i e -> do-      ppEnabledLayerNames'' <- ContT $ useAsCString (e)-      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (mempty)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')-    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8-    Data.Vector.imapM_ (\i e -> do-      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)-      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (mempty)-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')-    lift $ f--instance (Extendss InstanceCreateInfo es, PeekChain es) => FromCStruct (InstanceCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @InstanceCreateFlags ((p `plusPtr` 16 :: Ptr InstanceCreateFlags))-    pApplicationInfo <- peek @(Ptr ApplicationInfo) ((p `plusPtr` 24 :: Ptr (Ptr ApplicationInfo)))-    pApplicationInfo' <- maybePeek (\j -> peekCStruct @ApplicationInfo (j)) pApplicationInfo-    enabledLayerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))-    ppEnabledLayerNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar))))-    ppEnabledLayerNames' <- generateM (fromIntegral enabledLayerCount) (\i -> packCString =<< peek ((ppEnabledLayerNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))-    enabledExtensionCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))-    ppEnabledExtensionNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar))))-    ppEnabledExtensionNames' <- generateM (fromIntegral enabledExtensionCount) (\i -> packCString =<< peek ((ppEnabledExtensionNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))-    pure $ InstanceCreateInfo-             next flags pApplicationInfo' ppEnabledLayerNames' ppEnabledExtensionNames'--instance es ~ '[] => Zero (InstanceCreateInfo es) where-  zero = InstanceCreateInfo-           ()-           zero-           Nothing-           mempty-           mempty----- | 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---         'Vulkan.Core10.FundamentalTypes.Offset3D' parameter /must/---         always be zero.------     -   The @width@, @height@, and @depth@ members of a---         'Vulkan.Core10.FundamentalTypes.Extent3D' 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 'Vulkan.Core10.FundamentalTypes.Offset3D'---         parameter /must/ be integer multiples of Ax, Ay, and Az,---         respectively.------     -   @width@ of a 'Vulkan.Core10.FundamentalTypes.Extent3D' 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 'Vulkan.Core10.FundamentalTypes.Extent3D'---         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 'Vulkan.Core10.FundamentalTypes.Extent3D' 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--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device Device Memory>--- section describes memory properties queried from the physical device.------ For physical device feature queries see the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features Features>--- chapter.------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Extent3D',--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.QueueFamilyProperties2',--- 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlags',--- 'getPhysicalDeviceQueueFamilyProperties'-data QueueFamilyProperties = QueueFamilyProperties-  { -- | @queueFlags@ is a bitmask of-    -- 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlagBits' indicating-    -- capabilities of the queues in this queue family.-    queueFlags :: QueueFlags-  , -- | @queueCount@ is the unsigned integer count of queues in this queue-    -- family. Each queue family /must/ support at least one queue.-    queueCount :: Word32-  , -- | @timestampValidBits@ is the unsigned integer count of meaningful bits in-    -- the timestamps written via-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp'. 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.-    timestampValidBits :: Word32-  , -- | @minImageTransferGranularity@ is the minimum granularity supported for-    -- image transfer operations on the queues in this queue family.-    minImageTransferGranularity :: Extent3D-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (QueueFamilyProperties)-#endif-deriving instance Show QueueFamilyProperties--instance ToCStruct QueueFamilyProperties where-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p QueueFamilyProperties{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr QueueFlags)) (queueFlags)-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (queueCount)-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (timestampValidBits)-    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Extent3D)) (minImageTransferGranularity) . ($ ())-    lift $ f-  cStructSize = 24-  cStructAlignment = 4-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Extent3D)) (zero) . ($ ())-    lift $ f--instance FromCStruct QueueFamilyProperties where-  peekCStruct p = do-    queueFlags <- peek @QueueFlags ((p `plusPtr` 0 :: Ptr QueueFlags))-    queueCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    timestampValidBits <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))-    minImageTransferGranularity <- peekCStruct @Extent3D ((p `plusPtr` 12 :: Ptr Extent3D))-    pure $ QueueFamilyProperties-             queueFlags queueCount timestampValidBits minImageTransferGranularity--instance Zero QueueFamilyProperties where-  zero = QueueFamilyProperties-           zero-           zero-           zero-           zero----- | VkPhysicalDeviceMemoryProperties - Structure specifying physical device--- memory properties------ = Description------ The 'PhysicalDeviceMemoryProperties' 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 'Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS'. Each--- heap is described by an element of the @memoryHeaps@ array as a--- 'MemoryHeap' structure. The number of memory types available across all--- memory heaps is given by @memoryTypeCount@ and is less than or equal to--- 'Vulkan.Core10.APIConstants.MAX_MEMORY_TYPES'. Each memory type is--- described by an element of the @memoryTypes@ array as a 'MemoryType'--- structure.------ At least one heap /must/ include--- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_DEVICE_LOCAL_BIT' in--- 'MemoryHeap'::@flags@. If there are multiple heaps that all have similar--- performance characteristics, they /may/ all include--- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.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 'getPhysicalDeviceMemoryProperties' /must/--- have its @propertyFlags@ set to one of the following values:------ -   0------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'------ -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'---     |---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'------ There /must/ be at least one memory type with both the--- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'--- and--- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'--- bits set in its @propertyFlags@. There /must/ be at least one memory--- type with the--- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'--- bit set in its @propertyFlags@. If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceCoherentMemory deviceCoherentMemory>--- feature is enabled, there /must/ be at least one memory type with the--- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'--- 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:------ -   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) ; or------ -   the @propertyFlags@ members of __Y__ includes---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'---     or---     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'---     and __X__ does not------ 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--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-bitmask-list list of all allowed memory property flag combinations>--- is written in a valid order. But if instead--- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'--- was before--- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'--- |--- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT',--- the list would still be in a valid order.------ There may be a performance penalty for using device coherent or uncached--- device memory types, and using these accidentally is undesirable. In--- order to avoid this, memory types with these properties always appear at--- the end of the list; but are subject to the same rules otherwise.------ 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------ 'MemoryHeap', 'MemoryType',--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceMemoryProperties2',--- 'getPhysicalDeviceMemoryProperties'-data PhysicalDeviceMemoryProperties = PhysicalDeviceMemoryProperties-  { -- | @memoryTypeCount@ is the number of valid elements in the @memoryTypes@-    -- array.-    memoryTypeCount :: Word32-  , -- | @memoryTypes@ is an array of-    -- 'Vulkan.Core10.APIConstants.MAX_MEMORY_TYPES' 'MemoryType' structures-    -- describing the /memory types/ that /can/ be used to access memory-    -- allocated from the heaps specified by @memoryHeaps@.-    memoryTypes :: Vector MemoryType-  , -- | @memoryHeapCount@ is the number of valid elements in the @memoryHeaps@-    -- array.-    memoryHeapCount :: Word32-  , -- | @memoryHeaps@ is an array of-    -- 'Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS' 'MemoryHeap' structures-    -- describing the /memory heaps/ from which memory /can/ be allocated.-    memoryHeaps :: Vector MemoryHeap-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PhysicalDeviceMemoryProperties)-#endif-deriving instance Show PhysicalDeviceMemoryProperties--instance ToCStruct PhysicalDeviceMemoryProperties where-  withCStruct x f = allocaBytesAligned 520 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PhysicalDeviceMemoryProperties{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (memoryTypeCount)-    lift $ unless ((Data.Vector.length $ (memoryTypes)) <= MAX_MEMORY_TYPES) $-      throwIO $ IOError Nothing InvalidArgument "" "memoryTypes is too long, a maximum of MAX_MEMORY_TYPES elements are allowed" Nothing Nothing-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `plusPtr` (8 * (i)) :: Ptr MemoryType) (e) . ($ ())) (memoryTypes)-    lift $ poke ((p `plusPtr` 260 :: Ptr Word32)) (memoryHeapCount)-    lift $ unless ((Data.Vector.length $ (memoryHeaps)) <= MAX_MEMORY_HEAPS) $-      throwIO $ IOError Nothing InvalidArgument "" "memoryHeaps is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `plusPtr` (16 * (i)) :: Ptr MemoryHeap) (e) . ($ ())) (memoryHeaps)-    lift $ f-  cStructSize = 520-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)-    lift $ unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_TYPES) $-      throwIO $ IOError Nothing InvalidArgument "" "memoryTypes is too long, a maximum of MAX_MEMORY_TYPES elements are allowed" Nothing Nothing-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `plusPtr` (8 * (i)) :: Ptr MemoryType) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 260 :: Ptr Word32)) (zero)-    lift $ unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_HEAPS) $-      throwIO $ IOError Nothing InvalidArgument "" "memoryHeaps is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `plusPtr` (16 * (i)) :: Ptr MemoryHeap) (e) . ($ ())) (mempty)-    lift $ f--instance FromCStruct PhysicalDeviceMemoryProperties where-  peekCStruct p = do-    memoryTypeCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))-    memoryTypes <- generateM (MAX_MEMORY_TYPES) (\i -> peekCStruct @MemoryType (((lowerArrayPtr @MemoryType ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `advancePtrBytes` (8 * (i)) :: Ptr MemoryType)))-    memoryHeapCount <- peek @Word32 ((p `plusPtr` 260 :: Ptr Word32))-    memoryHeaps <- generateM (MAX_MEMORY_HEAPS) (\i -> peekCStruct @MemoryHeap (((lowerArrayPtr @MemoryHeap ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `advancePtrBytes` (16 * (i)) :: Ptr MemoryHeap)))-    pure $ PhysicalDeviceMemoryProperties-             memoryTypeCount memoryTypes memoryHeapCount memoryHeaps--instance Zero PhysicalDeviceMemoryProperties where-  zero = PhysicalDeviceMemoryProperties-           zero-           mempty-           zero-           mempty----- | VkMemoryType - Structure specifying memory type------ = See Also------ 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlags',--- 'PhysicalDeviceMemoryProperties'-data MemoryType = MemoryType-  { -- | @propertyFlags@ is a bitmask of-    -- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlagBits' of-    -- properties for this memory type.-    propertyFlags :: MemoryPropertyFlags-  , -- | @heapIndex@ describes which memory heap this memory type corresponds to,-    -- and /must/ be less than @memoryHeapCount@ from the-    -- 'PhysicalDeviceMemoryProperties' structure.-    heapIndex :: Word32-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (MemoryType)-#endif-deriving instance Show MemoryType--instance ToCStruct MemoryType where-  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p MemoryType{..} f = do-    poke ((p `plusPtr` 0 :: Ptr MemoryPropertyFlags)) (propertyFlags)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (heapIndex)-    f-  cStructSize = 8-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    f--instance FromCStruct MemoryType where-  peekCStruct p = do-    propertyFlags <- peek @MemoryPropertyFlags ((p `plusPtr` 0 :: Ptr MemoryPropertyFlags))-    heapIndex <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    pure $ MemoryType-             propertyFlags heapIndex--instance Storable MemoryType where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero MemoryType where-  zero = MemoryType-           zero-           zero----- | VkMemoryHeap - Structure specifying a memory heap------ = See Also------ 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MemoryHeapFlags',--- 'PhysicalDeviceMemoryProperties'-data MemoryHeap = MemoryHeap-  { -- | @size@ is the total memory size in bytes in the heap.-    size :: DeviceSize-  , -- | @flags@ is a bitmask of-    -- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MemoryHeapFlagBits' specifying-    -- attribute flags for the heap.-    flags :: MemoryHeapFlags-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (MemoryHeap)-#endif-deriving instance Show MemoryHeap--instance ToCStruct MemoryHeap where-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p MemoryHeap{..} f = do-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (size)-    poke ((p `plusPtr` 8 :: Ptr MemoryHeapFlags)) (flags)-    f-  cStructSize = 16-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)-    f--instance FromCStruct MemoryHeap where-  peekCStruct p = do-    size <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))-    flags <- peek @MemoryHeapFlags ((p `plusPtr` 8 :: Ptr MemoryHeapFlags))-    pure $ MemoryHeap-             size flags--instance Storable MemoryHeap where-  sizeOf ~_ = 16-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero MemoryHeap where-  zero = MemoryHeap-           zero-           zero----- | 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-compressed format, then @bufferFeatures@ /must/--- not support any features for the format.------ If @format@ is not a multi-plane format then @linearTilingFeatures@ and--- @optimalTilingFeatures@ /must/ not contain--- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DISJOINT_BIT'.------ = See Also------ 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlags',--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.FormatProperties2',--- 'getPhysicalDeviceFormatProperties'-data FormatProperties = FormatProperties-  { -- | @linearTilingFeatures@ is a bitmask of-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'-    -- specifying features supported by images created with a @tiling@-    -- parameter of 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'.-    linearTilingFeatures :: FormatFeatureFlags-  , -- | @optimalTilingFeatures@ is a bitmask of-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'-    -- specifying features supported by images created with a @tiling@-    -- parameter of 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'.-    optimalTilingFeatures :: FormatFeatureFlags-  , -- | @bufferFeatures@ is a bitmask of-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'-    -- specifying features supported by buffers.-    bufferFeatures :: FormatFeatureFlags-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (FormatProperties)-#endif-deriving instance Show FormatProperties--instance ToCStruct FormatProperties where-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p FormatProperties{..} f = do-    poke ((p `plusPtr` 0 :: Ptr FormatFeatureFlags)) (linearTilingFeatures)-    poke ((p `plusPtr` 4 :: Ptr FormatFeatureFlags)) (optimalTilingFeatures)-    poke ((p `plusPtr` 8 :: Ptr FormatFeatureFlags)) (bufferFeatures)-    f-  cStructSize = 12-  cStructAlignment = 4-  pokeZeroCStruct _ f = f--instance FromCStruct FormatProperties where-  peekCStruct p = do-    linearTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 0 :: Ptr FormatFeatureFlags))-    optimalTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 4 :: Ptr FormatFeatureFlags))-    bufferFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 8 :: Ptr FormatFeatureFlags))-    pure $ FormatProperties-             linearTilingFeatures optimalTilingFeatures bufferFeatures--instance Storable FormatProperties where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero FormatProperties where-  zero = FormatProperties-           zero-           zero-           zero----- | VkImageFormatProperties - Structure specifying an image format--- properties------ = Members------ -   @maxExtent@ are the maximum image dimensions. See the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extentperimagetype Allowed Extent Values>---     section below for how these values are constrained by @type@.------ -   @maxMipLevels@ is the maximum number of mipmap levels.---     @maxMipLevels@ /must/ be equal to the number of levels in the---     complete mipmap chain based on the @maxExtent.width@,---     @maxExtent.height@, and @maxExtent.depth@, except when one of the---     following conditions is true, in which case it /may/ instead be @1@:------     -   'getPhysicalDeviceImageFormatProperties'::@tiling@ was---         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'------     -   'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@tiling@---         was---         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'------     -   the---         'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@---         chain included a---         'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'---         structure with a handle type included in the @handleTypes@---         member for which mipmap image support is not required------     -   image @format@ is one of those listed in---         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>------     -   @flags@ contains---         'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   @maxArrayLayers@ is the maximum number of array layers.---     @maxArrayLayers@ /must/ be no less than---     'PhysicalDeviceLimits'::@maxImageArrayLayers@, except when one of---     the following conditions is true, in which case it /may/ instead be---     @1@:------     -   @tiling@ is---         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'------     -   @tiling@ is---         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL' and---         @type@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'------     -   @format@ is one of those listed in---         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>------ -   If @tiling@ is---     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',---     then @maxArrayLayers@ /must/ not be 0.------ -   @sampleCounts@ is a bitmask of---     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'---     specifying all the supported sample counts for this image as---     described---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supported-sample-counts below>.------ -   @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 'Vulkan.Core10.Image.createImage' will return--- 'Vulkan.Core10.Enums.Result.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--- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'.------ If the combination of parameters to--- 'getPhysicalDeviceImageFormatProperties' is not supported by the--- implementation for use in 'Vulkan.Core10.Image.createImage', then all--- members of 'ImageFormatProperties' will be filled with zero.------ Note------ Filling 'ImageFormatProperties' 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------ 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.FundamentalTypes.Extent3D',--- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalImageFormatPropertiesNV',--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2',--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',--- 'getPhysicalDeviceImageFormatProperties'-data ImageFormatProperties = ImageFormatProperties-  { -- No documentation found for Nested "VkImageFormatProperties" "maxExtent"-    maxExtent :: Extent3D-  , -- No documentation found for Nested "VkImageFormatProperties" "maxMipLevels"-    maxMipLevels :: Word32-  , -- No documentation found for Nested "VkImageFormatProperties" "maxArrayLayers"-    maxArrayLayers :: Word32-  , -- No documentation found for Nested "VkImageFormatProperties" "sampleCounts"-    sampleCounts :: SampleCountFlags-  , -- No documentation found for Nested "VkImageFormatProperties" "maxResourceSize"-    maxResourceSize :: DeviceSize-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ImageFormatProperties)-#endif-deriving instance Show ImageFormatProperties--instance ToCStruct ImageFormatProperties where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ImageFormatProperties{..} f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent3D)) (maxExtent) . ($ ())-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (maxMipLevels)-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (maxArrayLayers)-    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlags)) (sampleCounts)-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (maxResourceSize)-    lift $ f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent3D)) (zero) . ($ ())-    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)-    lift $ f--instance FromCStruct ImageFormatProperties where-  peekCStruct p = do-    maxExtent <- peekCStruct @Extent3D ((p `plusPtr` 0 :: Ptr Extent3D))-    maxMipLevels <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))-    maxArrayLayers <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))-    sampleCounts <- peek @SampleCountFlags ((p `plusPtr` 20 :: Ptr SampleCountFlags))-    maxResourceSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))-    pure $ ImageFormatProperties-             maxExtent maxMipLevels maxArrayLayers sampleCounts maxResourceSize--instance Zero ImageFormatProperties where-  zero = ImageFormatProperties-           zero-           zero-           zero-           zero-           zero----- | VkPhysicalDeviceFeatures - Structure describing the fine-grained--- features that can be supported by an implementation------ = Members------ The members of the 'PhysicalDeviceFeatures' structure describe the--- following features:------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32',--- 'Vulkan.Core10.Device.DeviceCreateInfo',--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',--- 'getPhysicalDeviceFeatures'-data PhysicalDeviceFeatures = PhysicalDeviceFeatures-  { -- | @robustBufferAccess@ specifies that accesses to buffers are-    -- bounds-checked against the range of the buffer descriptor (as determined-    -- by 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo'::@range@,-    -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo'::@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. Buffer accesses through buffer device addresses are-    --         not bounds-checked. If the-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-cooperativeMatrixRobustBufferAccess cooperativeMatrixRobustBufferAccess>-    --         feature is not enabled, then accesses using-    --         @OpCooperativeMatrixLoadNV@ and @OpCooperativeMatrixStoreNV@-    --         /may/ not be bounds-checked.-    ---    --         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-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --         is not enabled and any buffer access is determined to be out of-    --         bounds, then any other access of the same type (load, store, or-    --         atomic) to the same buffer that accesses an address less than 16-    --         bytes away from the out of bounds address /may/ also be-    --         considered out of bounds.-    ---    --     -   If the access is a load that reads from the same memory-    --         locations as a prior store in the same shader invocation, with-    --         no other intervening accesses to the same memory locations in-    --         that shader invocation, then the result of the load /may/ be the-    --         value stored by the store instruction, even if the access is out-    --         of bounds. If the load is @Volatile@, then an out of bounds load-    --         /must/ return the appropriate out of bounds value.-    ---    -- -   Accesses to descriptors written with a-    --     'Vulkan.Core10.APIConstants.NULL_HANDLE' resource or view are not-    --     considered to be out of bounds. Instead, each type of descriptor-    --     access defines a specific behavior for accesses to a null-    --     descriptor.-    ---    -- -   Out-of-bounds buffer loads will return any of the following values:-    ---    --     -   If the access is to a uniform buffer and-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --         is enabled, loads of offsets between the end of the descriptor-    --         range and the end of the descriptor range rounded up to a-    --         multiple of-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>-    --         bytes /must/ return either zero values or the contents of the-    --         memory at the offset being loaded. Loads of offsets past the-    --         descriptor range rounded up to a multiple of-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>-    --         bytes /must/ return zero values.-    ---    --     -   If the access is to a storage buffer and-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --         is enabled, loads of offsets between the end of the descriptor-    --         range and the end of the descriptor range rounded up to a-    --         multiple of-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>-    --         bytes /must/ return either zero values or the contents of the-    --         memory at the offset being loaded. Loads of offsets past the-    --         descriptor range rounded up to a multiple of-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>-    --         bytes /must/ return zero values. Similarly, stores to addresses-    --         between the end of the descriptor range and the end of the-    --         descriptor range rounded up to a multiple of-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>-    --         bytes /may/ be discarded.-    ---    --     -   Non-atomic accesses to storage buffers that are a multiple of 32-    --         bits /may/ be decomposed into 32-bit accesses that are-    --         individually bounds-checked.-    ---    --     -   If the access is to an index buffer and-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --         is enabled, zero values /must/ be returned.-    ---    --     -   If the access is to a uniform texel buffer or storage texel-    --         buffer and-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --         is enabled, zero values /must/ be returned, and then-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba Conversion to RGBA>-    --         is applied based on the buffer view’s format.-    ---    --     -   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.-    ---    --     -   If-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --         is enabled, out of bounds writes /must/ not modify any 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.-    ---    --     -   If-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --         is enabled, out of bounds atomics /must/ not modify any memory,-    --         and return an undefined value.-    ---    -- -   If-    --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --     is disabled, 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-    --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>-    --     is enabled, 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 the byte size of the-    --     memory range bound to the vertex buffer binding.-    ---    --     -   If a vertex input attribute is out of bounds, the-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction raw data>-    --         extracted are zero values, and missing G, B, or A components are-    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.-    ---    -- -   If @robustBufferAccess@ is not enabled, applications /must/ not-    --     perform out of bounds accesses.-    robustBufferAccess :: Bool-  , -- | @fullDrawIndexUint32@ specifies the full 32-bit range of indices is-    -- supported for indexed draw calls when using a-    -- 'Vulkan.Core10.Enums.IndexType.IndexType' of-    -- 'Vulkan.Core10.Enums.IndexType.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-    -- 'Vulkan.Core10.Enums.IndexType.IndexType' is-    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32'). If this feature is-    -- supported, @maxDrawIndexedIndexValue@ /must/ be 232-1; otherwise it-    -- /must/ be no smaller than 224-1. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDrawIndexedIndexValue maxDrawIndexedIndexValue>.-    fullDrawIndexUint32 :: Bool-  , -- | @imageCubeArray@ specifies whether image views with a-    -- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' of-    -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' /can/ be-    -- created, and that the corresponding @SampledCubeArray@ and-    -- @ImageCubeArray@ SPIR-V capabilities /can/ be used in shader code.-    imageCubeArray :: Bool-  , -- | @independentBlend@ specifies whether the-    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' settings are-    -- controlled independently per-attachment. If this feature is not enabled,-    -- the 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' settings-    -- for all color attachments /must/ be identical. Otherwise, a different-    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' /can/ be-    -- provided for each bound color attachment.-    independentBlend :: Bool-  , -- | @geometryShader@ specifies whether geometry shaders are supported. If-    -- this feature is not enabled, the-    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT' and-    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'-    -- enum values /must/ not be used. This also specifies whether shader-    -- modules /can/ declare the @Geometry@ capability.-    geometryShader :: Bool-  , -- | @tessellationShader@ specifies whether tessellation control and-    -- evaluation shaders are supported. If this feature is not enabled, the-    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',-    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',-    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',-    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',-    -- and-    -- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'-    -- enum values /must/ not be used. This also specifies whether shader-    -- modules /can/ declare the @Tessellation@ capability.-    tessellationShader :: Bool-  , -- | @sampleRateShading@ specifies whether-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>-    -- and multisample interpolation are supported. If this feature is not-    -- enabled, the @sampleShadingEnable@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo' structure-    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE' and the-    -- @minSampleShading@ member is ignored. This also specifies whether shader-    -- modules /can/ declare the @SampleRateShading@ capability.-    sampleRateShading :: Bool-  , -- | @dualSrcBlend@ specifies whether blend operations which take two sources-    -- are supported. If this feature is not enabled, the-    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',-    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',-    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', and-    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA' enum-    -- values /must/ not be used as source or destination blending factors. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb>.-    dualSrcBlend :: Bool-  , -- | @logicOp@ specifies whether logic operations are supported. If this-    -- feature is not enabled, the @logicOpEnable@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo' structure-    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE', and the-    -- @logicOp@ member is ignored.-    logicOp :: Bool-  , -- | @multiDrawIndirect@ specifies whether multiple draw indirect is-    -- supported. If this feature is not enabled, the @drawCount@ parameter to-    -- the 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' and-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect' commands-    -- /must/ be 0 or 1. The @maxDrawIndirectCount@ member of the-    -- 'PhysicalDeviceLimits' structure /must/ also be 1 if this feature is not-    -- supported. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDrawIndirectCount maxDrawIndirectCount>.-    multiDrawIndirect :: Bool-  , -- | @drawIndirectFirstInstance@ specifies whether indirect draw calls-    -- support the @firstInstance@ parameter. If this feature is not enabled,-    -- the @firstInstance@ member of all-    -- 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' and-    -- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures that-    -- are provided to the-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' and-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect' commands-    -- /must/ be 0.-    drawIndirectFirstInstance :: Bool-  , -- | @depthClamp@ specifies whether depth clamping is supported. If this-    -- feature is not enabled, the @depthClampEnable@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' structure-    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE'. Otherwise,-    -- setting @depthClampEnable@ to 'Vulkan.Core10.FundamentalTypes.TRUE' will-    -- enable depth clamping.-    depthClamp :: Bool-  , -- | @depthBiasClamp@ specifies whether depth bias clamping is supported. If-    -- this feature is not enabled, the @depthBiasClamp@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' structure-    -- /must/ be set to 0.0 unless the-    -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS' dynamic-    -- state is enabled, and the @depthBiasClamp@ parameter to-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBias' /must/ be set to-    -- 0.0.-    depthBiasClamp :: Bool-  , -- | @fillModeNonSolid@ specifies whether point and wireframe fill modes are-    -- supported. If this feature is not enabled, the-    -- 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT' and-    -- 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_LINE' enum values /must/-    -- not be used.-    fillModeNonSolid :: Bool-  , -- | @depthBounds@ specifies whether depth bounds tests are supported. If-    -- this feature is not enabled, the @depthBoundsTestEnable@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' structure-    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE'. When-    -- @depthBoundsTestEnable@ is set to-    -- 'Vulkan.Core10.FundamentalTypes.FALSE', the @minDepthBounds@ and-    -- @maxDepthBounds@ members of the-    -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' structure-    -- are ignored.-    depthBounds :: Bool-  , -- | @wideLines@ specifies whether lines with width other than 1.0 are-    -- supported. If this feature is not enabled, the @lineWidth@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' structure-    -- /must/ be set to 1.0 unless the-    -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH' dynamic-    -- state is enabled, and the @lineWidth@ parameter to-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' /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 'PhysicalDeviceLimits' structure,-    -- respectively.-    wideLines :: Bool-  , -- | @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 'PhysicalDeviceLimits' structure,-    -- respectively.-    largePoints :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo' structure-    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE'. Otherwise-    -- setting @alphaToOneEnable@ to 'Vulkan.Core10.FundamentalTypes.TRUE' will-    -- enable alpha-to-one behavior.-    alphaToOne :: Bool-  , -- | @multiViewport@ specifies whether more than one viewport is supported.-    -- If this feature is not enabled:-    ---    -- -   The @viewportCount@ and @scissorCount@ members of the-    --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' structure-    --     /must/ be set to 1.-    ---    -- -   The @firstViewport@ and @viewportCount@ parameters to the-    --     'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport' command /must/-    --     be set to 0 and 1, respectively.-    ---    -- -   The @firstScissor@ and @scissorCount@ parameters to the-    --     'Vulkan.Core10.CommandBufferBuilding.cmdSetScissor' command /must/-    --     be set to 0 and 1, respectively.-    ---    -- -   The @exclusiveScissorCount@ member of the-    --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'-    --     structure /must/ be set to 0 or 1.-    ---    -- -   The @firstExclusiveScissor@ and @exclusiveScissorCount@ parameters-    --     to the-    --     'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV'-    --     command /must/ be set to 0 and 1, respectively.-    multiViewport :: Bool-  , -- | @samplerAnisotropy@ specifies whether anisotropic filtering is-    -- supported. If this feature is not enabled, the @anisotropyEnable@ member-    -- of the 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure /must/ be-    -- 'Vulkan.Core10.FundamentalTypes.FALSE'.-    samplerAnisotropy :: Bool-  , -- | @textureCompressionETC2@ specifies whether all of the ETC2 and EAC-    -- compressed texture formats are supported. If this feature is enabled,-    -- then the-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'-    -- and-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'-    -- features /must/ be supported in @optimalTilingFeatures@ for the-    -- following formats:-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11_SNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11G11_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11G11_SNORM_BLOCK'-    ---    -- To query for additional properties, or if the feature is not enabled,-    -- 'getPhysicalDeviceFormatProperties' and-    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for-    -- supported properties of individual formats as normal.-    textureCompressionETC2 :: Bool-  , -- | @textureCompressionASTC_LDR@ specifies whether all of the ASTC LDR-    -- compressed texture formats are supported. If this feature is enabled,-    -- then the-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'-    -- and-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'-    -- features /must/ be supported in @optimalTilingFeatures@ for the-    -- following formats:-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_SRGB_BLOCK'-    ---    -- To query for additional properties, or if the feature is not enabled,-    -- 'getPhysicalDeviceFormatProperties' and-    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for-    -- supported properties of individual formats as normal.-    textureCompressionASTC_LDR :: Bool-  , -- | @textureCompressionBC@ specifies whether all of the BC compressed-    -- texture formats are supported. If this feature is enabled, then the-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'-    -- and-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'-    -- features /must/ be supported in @optimalTilingFeatures@ for the-    -- following formats:-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGB_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGB_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGBA_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGBA_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC2_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC2_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC3_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC3_SRGB_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC4_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC4_SNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC5_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC5_SNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC6H_UFLOAT_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC6H_SFLOAT_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC7_UNORM_BLOCK'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC7_SRGB_BLOCK'-    ---    -- To query for additional properties, or if the feature is not enabled,-    -- 'getPhysicalDeviceFormatProperties' and-    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for-    -- supported properties of individual formats as normal.-    textureCompressionBC :: Bool-  , -- | @occlusionQueryPrecise@ specifies whether occlusion queries returning-    -- actual sample counts are supported. Occlusion queries are created in a-    -- 'Vulkan.Core10.Handles.QueryPool' by specifying the @queryType@ of-    -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' in the-    -- 'Vulkan.Core10.Query.QueryPoolCreateInfo' structure which is passed to-    -- 'Vulkan.Core10.Query.createQueryPool'. If this feature is enabled,-    -- queries of this type /can/ enable-    -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT' in-    -- the @flags@ parameter to-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery'. 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-    -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT' is-    -- set, occlusion queries will report the actual number of samples passed.-    occlusionQueryPrecise :: Bool-  , -- | @pipelineStatisticsQuery@ specifies whether the pipeline statistics-    -- queries are supported. If this feature is not enabled, queries of type-    -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' /cannot/-    -- be created, and none of the-    -- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'-    -- bits /can/ be set in the @pipelineStatistics@ member of the-    -- 'Vulkan.Core10.Query.QueryPoolCreateInfo' structure.-    pipelineStatisticsQuery :: Bool-  , -- | @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 @NonWritable@-    -- decoration (or the @readonly@ memory qualifier in GLSL).-    vertexPipelineStoresAndAtomics :: Bool-  , -- | @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 @NonWritable@ decoration (or the-    -- @readonly@ memory qualifier in GLSL).-    fragmentStoresAndAtomics :: Bool-  , -- | @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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellationShader>-    -- or-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometryShader>-    -- features.-    shaderTessellationAndGeometryPointSize :: Bool-  , -- | @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.-    shaderImageGatherExtended :: Bool-  , -- | @shaderStorageImageExtendedFormats@ specifies whether all the “storage-    -- image extended formats” below are supported; if this feature is-    -- supported, then the-    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_BIT'-    -- /must/ be supported in @optimalTilingFeatures@ for the following-    -- formats:-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFLOAT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_B10G11R11_UFLOAT_PACK32'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SFLOAT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_UNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_A2B10G10R10_UNORM_PACK32'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_UNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_UNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_UNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_SNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_SNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_SNORM'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SINT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_SINT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SINT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_SINT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_A2B10G10R10_UINT_PACK32'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_UINT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UINT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_UINT'-    ---    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'-    ---    -- Note-    ---    -- @shaderStorageImageExtendedFormats@ feature only adds a guarantee of-    -- format support, which is specified for the whole physical device.-    -- Therefore enabling or disabling the feature via-    -- 'Vulkan.Core10.Device.createDevice' has no practical effect.-    ---    -- To query for additional properties, or if the feature is not supported,-    -- 'getPhysicalDeviceFormatProperties' and-    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for-    -- supported properties of individual formats, as usual rules allow.-    ---    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_UINT',-    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_SINT', and-    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_SFLOAT' from-    -- @StorageImageExtendedFormats@ SPIR-V capability, are already covered by-    -- core Vulkan-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-mandatory-features-32bit mandatory format support>.-    shaderStorageImageExtendedFormats :: Bool-  , -- | @shaderStorageImageMultisample@ specifies whether multisampled storage-    -- images are supported. If this feature is not enabled, images that are-    -- created with a @usage@ that includes-    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT' /must/-    -- be created with @samples@ equal to-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'. This also-    -- specifies whether shader modules /can/ declare the-    -- @StorageImageMultisample@ and @ImageMSArray@ capabilities.-    shaderStorageImageMultisample :: Bool-  , -- | @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.-    shaderStorageImageReadWithoutFormat :: Bool-  , -- | @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.-    shaderStorageImageWriteWithoutFormat :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.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.-    shaderUniformBufferArrayDynamicIndexing :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',-    -- or 'Vulkan.Core10.Enums.DescriptorType.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.-    shaderSampledImageArrayDynamicIndexing :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.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.-    shaderStorageBufferArrayDynamicIndexing :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.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.-    shaderStorageImageArrayDynamicIndexing :: Bool-  , -- | @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.-    shaderClipDistance :: Bool-  , -- | @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.-    shaderCullDistance :: Bool-  , -- | @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. Declaring and-    -- using 64-bit floats is enabled for all storage classes that SPIR-V-    -- allows with the @Float64@ capability.-    shaderFloat64 :: Bool-  , -- | @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. Declaring-    -- and using 64-bit integers is enabled for all storage classes that SPIR-V-    -- allows with the @Int64@ capability.-    shaderInt64 :: Bool-  , -- | @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. However,-    -- this only enables a subset of the storage classes that SPIR-V allows for-    -- the @Int16@ SPIR-V capability: Declaring and using 16-bit integers in-    -- the @Private@, @Workgroup@, and @Function@ storage classes is enabled,-    -- while declaring them in the interface storage classes (e.g.,-    -- @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@, and-    -- @PushConstant@) is not enabled.-    shaderInt16 :: Bool-  , -- | @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.-    shaderResourceResidency :: Bool-  , -- | @shaderResourceMinLod@ specifies whether image operations specifying 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.-    shaderResourceMinLod :: Bool-  , -- | @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-    -- 'Vulkan.Core10.MemoryManagement.bindBufferMemory' and-    -- 'Vulkan.Core10.MemoryManagement.bindImageMemory' commands. In this case,-    -- buffers and images /must/ not be created with-    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'-    -- and-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'-    -- set in the @flags@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'-    -- and 'Vulkan.Core10.Image.ImageCreateInfo' structures, respectively.-    -- Otherwise resource memory /can/ be managed as described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures Sparse Resource Features>.-    sparseBinding :: Bool-  , -- | @sparseResidencyBuffer@ specifies whether the device /can/ access-    -- partially resident buffers. If this feature is not enabled, buffers-    -- /must/ not be created with-    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'-    -- set in the @flags@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'-    -- structure.-    sparseResidencyBuffer :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' /must/ not-    -- be created with-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'-    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'-    -- structure.-    sparseResidencyImage2D :: Bool-  , -- | @sparseResidencyImage3D@ specifies whether the device /can/ access-    -- partially resident 3D images. If this feature is not enabled, images-    -- with an @imageType@ of 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'-    -- /must/ not be created with-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'-    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'-    -- structure.-    sparseResidencyImage3D :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_2_BIT' /must/ not-    -- be created with-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'-    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'-    -- structure.-    sparseResidency2Samples :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_4_BIT' /must/ not-    -- be created with-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'-    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'-    -- structure.-    sparseResidency4Samples :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_8_BIT' /must/ not-    -- be created with-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'-    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'-    -- structure.-    sparseResidency8Samples :: Bool-  , -- | @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-    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @samples@ set to-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_16_BIT' /must/ not-    -- be created with-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'-    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'-    -- structure.-    sparseResidency16Samples :: Bool-  , -- | @sparseResidencyAliased@ specifies whether the physical device /can/-    -- correctly access data aliased into multiple locations. If this feature-    -- is not enabled, the-    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'-    -- and-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'-    -- enum values /must/ not be used in @flags@ members of the-    -- 'Vulkan.Core10.Buffer.BufferCreateInfo' and-    -- 'Vulkan.Core10.Image.ImageCreateInfo' structures, respectively.-    sparseResidencyAliased :: Bool-  , -- | @variableMultisampleRate@ specifies whether all pipelines that will be-    -- bound to a command buffer during a-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments subpass which uses no attachments>-    -- /must/ have the same value for-    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@.-    -- If set to 'Vulkan.Core10.FundamentalTypes.TRUE', the implementation-    -- supports variable multisample rates in a subpass which uses no-    -- attachments. If set to 'Vulkan.Core10.FundamentalTypes.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.-    variableMultisampleRate :: Bool-  , -- | @inheritedQueries@ specifies whether a secondary command buffer /may/ be-    -- executed while a query is active.-    inheritedQueries :: Bool-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PhysicalDeviceFeatures)-#endif-deriving instance Show PhysicalDeviceFeatures--instance ToCStruct PhysicalDeviceFeatures where-  withCStruct x f = allocaBytesAligned 220 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PhysicalDeviceFeatures{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (robustBufferAccess))-    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (fullDrawIndexUint32))-    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (imageCubeArray))-    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (independentBlend))-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (geometryShader))-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (tessellationShader))-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleRateShading))-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (dualSrcBlend))-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (logicOp))-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (multiDrawIndirect))-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (drawIndirectFirstInstance))-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (depthClamp))-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (depthBiasClamp))-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (fillModeNonSolid))-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (depthBounds))-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (wideLines))-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (largePoints))-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (alphaToOne))-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (multiViewport))-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (samplerAnisotropy))-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (textureCompressionETC2))-    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (textureCompressionASTC_LDR))-    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (textureCompressionBC))-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (occlusionQueryPrecise))-    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (pipelineStatisticsQuery))-    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (vertexPipelineStoresAndAtomics))-    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (fragmentStoresAndAtomics))-    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (shaderTessellationAndGeometryPointSize))-    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (shaderImageGatherExtended))-    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageExtendedFormats))-    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageMultisample))-    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageReadWithoutFormat))-    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageWriteWithoutFormat))-    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayDynamicIndexing))-    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayDynamicIndexing))-    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayDynamicIndexing))-    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayDynamicIndexing))-    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (shaderClipDistance))-    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (shaderCullDistance))-    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (shaderFloat64))-    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (shaderInt64))-    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (shaderInt16))-    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (shaderResourceResidency))-    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (shaderResourceMinLod))-    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (sparseBinding))-    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (sparseResidencyBuffer))-    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (sparseResidencyImage2D))-    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (sparseResidencyImage3D))-    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (sparseResidency2Samples))-    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (sparseResidency4Samples))-    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (sparseResidency8Samples))-    poke ((p `plusPtr` 204 :: Ptr Bool32)) (boolToBool32 (sparseResidency16Samples))-    poke ((p `plusPtr` 208 :: Ptr Bool32)) (boolToBool32 (sparseResidencyAliased))-    poke ((p `plusPtr` 212 :: Ptr Bool32)) (boolToBool32 (variableMultisampleRate))-    poke ((p `plusPtr` 216 :: Ptr Bool32)) (boolToBool32 (inheritedQueries))-    f-  cStructSize = 220-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 204 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 208 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 212 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 216 :: Ptr Bool32)) (boolToBool32 (zero))-    f--instance FromCStruct PhysicalDeviceFeatures where-  peekCStruct p = do-    robustBufferAccess <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))-    fullDrawIndexUint32 <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))-    imageCubeArray <- peek @Bool32 ((p `plusPtr` 8 :: Ptr Bool32))-    independentBlend <- peek @Bool32 ((p `plusPtr` 12 :: Ptr Bool32))-    geometryShader <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))-    tessellationShader <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))-    sampleRateShading <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))-    dualSrcBlend <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))-    logicOp <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))-    multiDrawIndirect <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))-    drawIndirectFirstInstance <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))-    depthClamp <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))-    depthBiasClamp <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))-    fillModeNonSolid <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))-    depthBounds <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))-    wideLines <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))-    largePoints <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))-    alphaToOne <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))-    multiViewport <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))-    samplerAnisotropy <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))-    textureCompressionETC2 <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))-    textureCompressionASTC_LDR <- peek @Bool32 ((p `plusPtr` 84 :: Ptr Bool32))-    textureCompressionBC <- peek @Bool32 ((p `plusPtr` 88 :: Ptr Bool32))-    occlusionQueryPrecise <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))-    pipelineStatisticsQuery <- peek @Bool32 ((p `plusPtr` 96 :: Ptr Bool32))-    vertexPipelineStoresAndAtomics <- peek @Bool32 ((p `plusPtr` 100 :: Ptr Bool32))-    fragmentStoresAndAtomics <- peek @Bool32 ((p `plusPtr` 104 :: Ptr Bool32))-    shaderTessellationAndGeometryPointSize <- peek @Bool32 ((p `plusPtr` 108 :: Ptr Bool32))-    shaderImageGatherExtended <- peek @Bool32 ((p `plusPtr` 112 :: Ptr Bool32))-    shaderStorageImageExtendedFormats <- peek @Bool32 ((p `plusPtr` 116 :: Ptr Bool32))-    shaderStorageImageMultisample <- peek @Bool32 ((p `plusPtr` 120 :: Ptr Bool32))-    shaderStorageImageReadWithoutFormat <- peek @Bool32 ((p `plusPtr` 124 :: Ptr Bool32))-    shaderStorageImageWriteWithoutFormat <- peek @Bool32 ((p `plusPtr` 128 :: Ptr Bool32))-    shaderUniformBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 132 :: Ptr Bool32))-    shaderSampledImageArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 136 :: Ptr Bool32))-    shaderStorageBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 140 :: Ptr Bool32))-    shaderStorageImageArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 144 :: Ptr Bool32))-    shaderClipDistance <- peek @Bool32 ((p `plusPtr` 148 :: Ptr Bool32))-    shaderCullDistance <- peek @Bool32 ((p `plusPtr` 152 :: Ptr Bool32))-    shaderFloat64 <- peek @Bool32 ((p `plusPtr` 156 :: Ptr Bool32))-    shaderInt64 <- peek @Bool32 ((p `plusPtr` 160 :: Ptr Bool32))-    shaderInt16 <- peek @Bool32 ((p `plusPtr` 164 :: Ptr Bool32))-    shaderResourceResidency <- peek @Bool32 ((p `plusPtr` 168 :: Ptr Bool32))-    shaderResourceMinLod <- peek @Bool32 ((p `plusPtr` 172 :: Ptr Bool32))-    sparseBinding <- peek @Bool32 ((p `plusPtr` 176 :: Ptr Bool32))-    sparseResidencyBuffer <- peek @Bool32 ((p `plusPtr` 180 :: Ptr Bool32))-    sparseResidencyImage2D <- peek @Bool32 ((p `plusPtr` 184 :: Ptr Bool32))-    sparseResidencyImage3D <- peek @Bool32 ((p `plusPtr` 188 :: Ptr Bool32))-    sparseResidency2Samples <- peek @Bool32 ((p `plusPtr` 192 :: Ptr Bool32))-    sparseResidency4Samples <- peek @Bool32 ((p `plusPtr` 196 :: Ptr Bool32))-    sparseResidency8Samples <- peek @Bool32 ((p `plusPtr` 200 :: Ptr Bool32))-    sparseResidency16Samples <- peek @Bool32 ((p `plusPtr` 204 :: Ptr Bool32))-    sparseResidencyAliased <- peek @Bool32 ((p `plusPtr` 208 :: Ptr Bool32))-    variableMultisampleRate <- peek @Bool32 ((p `plusPtr` 212 :: Ptr Bool32))-    inheritedQueries <- peek @Bool32 ((p `plusPtr` 216 :: Ptr Bool32))-    pure $ PhysicalDeviceFeatures-             (bool32ToBool robustBufferAccess) (bool32ToBool fullDrawIndexUint32) (bool32ToBool imageCubeArray) (bool32ToBool independentBlend) (bool32ToBool geometryShader) (bool32ToBool tessellationShader) (bool32ToBool sampleRateShading) (bool32ToBool dualSrcBlend) (bool32ToBool logicOp) (bool32ToBool multiDrawIndirect) (bool32ToBool drawIndirectFirstInstance) (bool32ToBool depthClamp) (bool32ToBool depthBiasClamp) (bool32ToBool fillModeNonSolid) (bool32ToBool depthBounds) (bool32ToBool wideLines) (bool32ToBool largePoints) (bool32ToBool alphaToOne) (bool32ToBool multiViewport) (bool32ToBool samplerAnisotropy) (bool32ToBool textureCompressionETC2) (bool32ToBool textureCompressionASTC_LDR) (bool32ToBool textureCompressionBC) (bool32ToBool occlusionQueryPrecise) (bool32ToBool pipelineStatisticsQuery) (bool32ToBool vertexPipelineStoresAndAtomics) (bool32ToBool fragmentStoresAndAtomics) (bool32ToBool shaderTessellationAndGeometryPointSize) (bool32ToBool shaderImageGatherExtended) (bool32ToBool shaderStorageImageExtendedFormats) (bool32ToBool shaderStorageImageMultisample) (bool32ToBool shaderStorageImageReadWithoutFormat) (bool32ToBool shaderStorageImageWriteWithoutFormat) (bool32ToBool shaderUniformBufferArrayDynamicIndexing) (bool32ToBool shaderSampledImageArrayDynamicIndexing) (bool32ToBool shaderStorageBufferArrayDynamicIndexing) (bool32ToBool shaderStorageImageArrayDynamicIndexing) (bool32ToBool shaderClipDistance) (bool32ToBool shaderCullDistance) (bool32ToBool shaderFloat64) (bool32ToBool shaderInt64) (bool32ToBool shaderInt16) (bool32ToBool shaderResourceResidency) (bool32ToBool shaderResourceMinLod) (bool32ToBool sparseBinding) (bool32ToBool sparseResidencyBuffer) (bool32ToBool sparseResidencyImage2D) (bool32ToBool sparseResidencyImage3D) (bool32ToBool sparseResidency2Samples) (bool32ToBool sparseResidency4Samples) (bool32ToBool sparseResidency8Samples) (bool32ToBool sparseResidency16Samples) (bool32ToBool sparseResidencyAliased) (bool32ToBool variableMultisampleRate) (bool32ToBool inheritedQueries)--instance Storable PhysicalDeviceFeatures where-  sizeOf ~_ = 220-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero PhysicalDeviceFeatures where-  zero = PhysicalDeviceFeatures-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero----- | VkPhysicalDeviceSparseProperties - Structure specifying physical device--- sparse memory properties------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32', 'PhysicalDeviceProperties'-data PhysicalDeviceSparseProperties = PhysicalDeviceSparseProperties-  { -- | @residencyStandard2DBlockShape@ is 'Vulkan.Core10.FundamentalTypes.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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle Standard Sparse Image Block Shapes (Single Sample)>-    -- table. If this property is not supported the value returned in the-    -- @imageGranularity@ member of the-    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'-    -- structure for single-sample 2D images is not /required/ to match the-    -- standard sparse image block dimensions listed in the table.-    residencyStandard2DBlockShape :: Bool-  , -- | @residencyStandard2DMultisampleBlockShape@ is-    -- 'Vulkan.Core10.FundamentalTypes.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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapesmsaa Standard Sparse Image Block Shapes (MSAA)>-    -- table. If this property is not supported, the value returned in the-    -- @imageGranularity@ member of the-    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'-    -- structure for multisample 2D images is not /required/ to match the-    -- standard sparse image block dimensions listed in the table.-    residencyStandard2DMultisampleBlockShape :: Bool-  , -- | @residencyStandard3DBlockShape@ is 'Vulkan.Core10.FundamentalTypes.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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle Standard Sparse Image Block Shapes (Single Sample)>-    -- table. If this property is not supported, the value returned in the-    -- @imageGranularity@ member of the-    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'-    -- structure for 3D images is not /required/ to match the standard sparse-    -- image block dimensions listed in the table.-    residencyStandard3DBlockShape :: Bool-  , -- | @residencyAlignedMipSize@ is 'Vulkan.Core10.FundamentalTypes.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-    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'-    -- structure will be placed in the mip tail. If this property is reported-    -- the implementation is allowed to return-    -- 'Vulkan.Core10.Enums.SparseImageFormatFlagBits.SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT'-    -- in the @flags@ member of-    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',-    -- 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.-    residencyAlignedMipSize :: Bool-  , -- | @residencyNonResidentStrict@ specifies whether the physical device /can/-    -- consistently access non-resident regions of a resource. If this property-    -- is 'Vulkan.Core10.FundamentalTypes.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.-    residencyNonResidentStrict :: Bool-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PhysicalDeviceSparseProperties)-#endif-deriving instance Show PhysicalDeviceSparseProperties--instance ToCStruct PhysicalDeviceSparseProperties where-  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PhysicalDeviceSparseProperties{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (residencyStandard2DBlockShape))-    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (residencyStandard2DMultisampleBlockShape))-    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (residencyStandard3DBlockShape))-    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (residencyAlignedMipSize))-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (residencyNonResidentStrict))-    f-  cStructSize = 20-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))-    f--instance FromCStruct PhysicalDeviceSparseProperties where-  peekCStruct p = do-    residencyStandard2DBlockShape <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))-    residencyStandard2DMultisampleBlockShape <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))-    residencyStandard3DBlockShape <- peek @Bool32 ((p `plusPtr` 8 :: Ptr Bool32))-    residencyAlignedMipSize <- peek @Bool32 ((p `plusPtr` 12 :: Ptr Bool32))-    residencyNonResidentStrict <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))-    pure $ PhysicalDeviceSparseProperties-             (bool32ToBool residencyStandard2DBlockShape) (bool32ToBool residencyStandard2DMultisampleBlockShape) (bool32ToBool residencyStandard3DBlockShape) (bool32ToBool residencyAlignedMipSize) (bool32ToBool residencyNonResidentStrict)--instance Storable PhysicalDeviceSparseProperties where-  sizeOf ~_ = 20-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero PhysicalDeviceSparseProperties where-  zero = PhysicalDeviceSparseProperties-           zero-           zero-           zero-           zero-           zero----- | VkPhysicalDeviceLimits - Structure reporting implementation-dependent--- physical device limits------ = Members------ The 'PhysicalDeviceLimits' are properties of the physical device. These--- are available in the @limits@ member of the 'PhysicalDeviceProperties'--- structure which is returned from 'getPhysicalDeviceProperties'.------ = Description------ [1]---     For all bitmasks of---     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits', 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---     'getPhysicalDeviceImageFormatProperties' as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supported-sample-counts Supported Sample Counts>.------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'PhysicalDeviceProperties',--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags'-data PhysicalDeviceLimits = PhysicalDeviceLimits-  { -- | @maxImageDimension1D@ is the largest dimension (@width@) that is-    -- guaranteed to be supported for all images created with an @imageType@ of-    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'. Some combinations of-    -- image parameters (format, usage, etc.) /may/ allow support for larger-    -- dimensions, which /can/ be queried using-    -- 'getPhysicalDeviceImageFormatProperties'.-    maxImageDimension1D :: Word32-  , -- | @maxImageDimension2D@ is the largest dimension (@width@ or @height@)-    -- that is guaranteed to be supported for all images created with an-    -- @imageType@ of 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and without-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'-    -- set in @flags@. Some combinations of image parameters (format, usage,-    -- etc.) /may/ allow support for larger dimensions, which /can/ be queried-    -- using 'getPhysicalDeviceImageFormatProperties'.-    maxImageDimension2D :: Word32-  , -- | @maxImageDimension3D@ is the largest dimension (@width@, @height@, or-    -- @depth@) that is guaranteed to be supported for all images created with-    -- an @imageType@ of 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'. Some-    -- combinations of image parameters (format, usage, etc.) /may/ allow-    -- support for larger dimensions, which /can/ be queried using-    -- 'getPhysicalDeviceImageFormatProperties'.-    maxImageDimension3D :: Word32-  , -- | @maxImageDimensionCube@ is the largest dimension (@width@ or @height@)-    -- that is guaranteed to be supported for all images created with an-    -- @imageType@ of 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and with-    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'-    -- set in @flags@. Some combinations of image parameters (format, usage,-    -- etc.) /may/ allow support for larger dimensions, which /can/ be queried-    -- using 'getPhysicalDeviceImageFormatProperties'.-    maxImageDimensionCube :: Word32-  , -- | @maxImageArrayLayers@ is the maximum number of layers (@arrayLayers@)-    -- for an image.-    maxImageArrayLayers :: Word32-  , -- | @maxTexelBufferElements@ is the maximum number of addressable texels for-    -- a buffer view created on a buffer which was created with the-    -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'-    -- or-    -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'-    -- set in the @usage@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'-    -- structure.-    maxTexelBufferElements :: Word32-  , -- | @maxUniformBufferRange@ is the maximum value that /can/ be specified in-    -- the @range@ member of any-    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structures passed to-    -- a call to 'Vulkan.Core10.DescriptorSet.updateDescriptorSets' for-    -- descriptors of type-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'.-    maxUniformBufferRange :: Word32-  , -- | @maxStorageBufferRange@ is the maximum value that /can/ be specified in-    -- the @range@ member of any-    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structures passed to-    -- a call to 'Vulkan.Core10.DescriptorSet.updateDescriptorSets' for-    -- descriptors of type-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'.-    maxStorageBufferRange :: Word32-  , -- | @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-    -- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo' structure,-    -- (@offset@ + @size@) /must/ be less than or equal to this limit.-    maxPushConstantsSize :: Word32-  , -- | @maxMemoryAllocationCount@ is the maximum number of device memory-    -- allocations, as created by 'Vulkan.Core10.Memory.allocateMemory', which-    -- /can/ simultaneously exist.-    maxMemoryAllocationCount :: Word32-  , -- | @maxSamplerAllocationCount@ is the maximum number of sampler objects, as-    -- created by 'Vulkan.Core10.Sampler.createSampler', which /can/-    -- simultaneously exist on a device.-    maxSamplerAllocationCount :: Word32-  , -- | @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 'Vulkan.Core10.Handles.DeviceMemory' object-    -- without aliasing. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-bufferimagegranularity Buffer-Image Granularity>-    -- for more details.-    bufferImageGranularity :: DeviceSize-  , -- | @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.-    sparseAddressSpaceSize :: DeviceSize-  , -- | @maxBoundDescriptorSets@ is the maximum number of descriptor sets that-    -- /can/ be simultaneously used by a pipeline. All-    -- 'Vulkan.Core10.Handles.DescriptorSet' decorations in shader modules-    -- /must/ have a value less than @maxBoundDescriptorSets@. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sets>.-    maxBoundDescriptorSets :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. A descriptor is accessible to a shader-    -- stage when the @stageFlags@ member of the-    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has-    -- the bit for that shader stage set. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>.-    maxPerStageDescriptorSamplers :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. A descriptor is accessible to a shader-    -- stage when the @stageFlags@ member of the-    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has-    -- the bit for that shader stage set. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.-    maxPerStageDescriptorUniformBuffers :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. A descriptor is accessible to a-    -- pipeline shader stage when the @stageFlags@ member of the-    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has-    -- the bit for that shader stage set. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.-    maxPerStageDescriptorStorageBuffers :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. A descriptor is accessible to a-    -- pipeline shader stage when the @stageFlags@ member of the-    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has-    -- the bit for that shader stage set. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>,-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage>,-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer>.-    maxPerStageDescriptorSampledImages :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. A descriptor is accessible to a-    -- pipeline shader stage when the @stageFlags@ member of the-    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has-    -- the bit for that shader stage set. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage>,-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer>.-    maxPerStageDescriptorStorageImages :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. A descriptor is accessible to a-    -- pipeline shader stage when the @stageFlags@ member of the-    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has-    -- the bit for that shader stage set. These are only supported for the-    -- fragment stage. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment>.-    maxPerStageDescriptorInputAttachments :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',-    -- or 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. For the fragment shader stage the-    -- framebuffer color attachments also count against this limit.-    maxPerStageResources :: Word32-  , -- | @maxDescriptorSetSamplers@ is the maximum number of samplers that /can/-    -- be included in a pipeline layout. Descriptors with a type of-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>.-    maxDescriptorSetSamplers :: Word32-  , -- | @maxDescriptorSetUniformBuffers@ is the maximum number of uniform-    -- buffers that /can/ be included in a pipeline layout. Descriptors with a-    -- type of-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.-    maxDescriptorSetUniformBuffers :: Word32-  , -- | @maxDescriptorSetUniformBuffersDynamic@ is the maximum number of dynamic-    -- uniform buffers that /can/ be included in a pipeline layout. Descriptors-    -- with a type of-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.-    maxDescriptorSetUniformBuffersDynamic :: Word32-  , -- | @maxDescriptorSetStorageBuffers@ is the maximum number of storage-    -- buffers that /can/ be included in a pipeline layout. Descriptors with a-    -- type of-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.-    maxDescriptorSetStorageBuffers :: Word32-  , -- | @maxDescriptorSetStorageBuffersDynamic@ is the maximum number of dynamic-    -- storage buffers that /can/ be included in a pipeline layout. Descriptors-    -- with a type of-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.-    maxDescriptorSetStorageBuffersDynamic :: Word32-  , -- | @maxDescriptorSetSampledImages@ is the maximum number of sampled images-    -- that /can/ be included in a pipeline layout. Descriptors with a type of-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>,-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage>,-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer>.-    maxDescriptorSetSampledImages :: Word32-  , -- | @maxDescriptorSetStorageImages@ is the maximum number of storage images-    -- that /can/ be included in a pipeline layout. Descriptors with a type of-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', or-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage>,-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer>.-    maxDescriptorSetStorageImages :: Word32-  , -- | @maxDescriptorSetInputAttachments@ is the maximum number of input-    -- attachments that /can/ be included in a pipeline layout. Descriptors-    -- with a type of-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'-    -- count against this limit. Only descriptors in descriptor set layouts-    -- created without the-    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set count against this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment>.-    maxDescriptorSetInputAttachments :: Word32-  , -- | @maxVertexInputAttributes@ is the maximum number of vertex input-    -- attributes that /can/ be specified for a graphics pipeline. These are-    -- described in the array of-    -- 'Vulkan.Core10.Pipeline.VertexInputAttributeDescription' structures that-    -- are provided at graphics pipeline creation time via the-    -- @pVertexAttributeDescriptions@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo' structure.-    -- See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-attrib>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.-    maxVertexInputAttributes :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' structures that-    -- are provided at graphics pipeline creation time via the-    -- @pVertexBindingDescriptions@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo' structure.-    -- The @binding@ member of-    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' /must/ be less-    -- than this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.-    maxVertexInputBindings :: Word32-  , -- | @maxVertexInputAttributeOffset@ is the maximum vertex input attribute-    -- offset that /can/ be added to the vertex input binding stride. The-    -- @offset@ member of the-    -- 'Vulkan.Core10.Pipeline.VertexInputAttributeDescription' structure-    -- /must/ be less than or equal to this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.-    maxVertexInputAttributeOffset :: Word32-  , -- | @maxVertexInputBindingStride@ is the maximum vertex input binding stride-    -- that /can/ be specified in a vertex input binding. The @stride@ member-    -- of the 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' structure-    -- /must/ be less than or equal to this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.-    maxVertexInputBindingStride :: Word32-  , -- | @maxVertexOutputComponents@ is the maximum number of components of-    -- output variables which /can/ be output by a vertex shader. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-vertex>.-    maxVertexOutputComponents :: Word32-  , -- | @maxTessellationGenerationLevel@ is the maximum tessellation generation-    -- level supported by the fixed-function tessellation primitive generator.-    -- See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>.-    maxTessellationGenerationLevel :: Word32-  , -- | @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-    -- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo' 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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>.-    maxTessellationPatchSize :: Word32-  , -- | @maxTessellationControlPerVertexInputComponents@ is the maximum number-    -- of components of input variables which /can/ be provided as per-vertex-    -- inputs to the tessellation control shader stage.-    maxTessellationControlPerVertexInputComponents :: Word32-  , -- | @maxTessellationControlPerVertexOutputComponents@ is the maximum number-    -- of components of per-vertex output variables which /can/ be output from-    -- the tessellation control shader stage.-    maxTessellationControlPerVertexOutputComponents :: Word32-  , -- | @maxTessellationControlPerPatchOutputComponents@ is the maximum number-    -- of components of per-patch output variables which /can/ be output from-    -- the tessellation control shader stage.-    maxTessellationControlPerPatchOutputComponents :: Word32-  , -- | @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.-    maxTessellationControlTotalOutputComponents :: Word32-  , -- | @maxTessellationEvaluationInputComponents@ is the maximum number of-    -- components of input variables which /can/ be provided as per-vertex-    -- inputs to the tessellation evaluation shader stage.-    maxTessellationEvaluationInputComponents :: Word32-  , -- | @maxTessellationEvaluationOutputComponents@ is the maximum number of-    -- components of per-vertex output variables which /can/ be output from the-    -- tessellation evaluation shader stage.-    maxTessellationEvaluationOutputComponents :: Word32-  , -- | @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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry>.-    maxGeometryShaderInvocations :: Word32-  , -- | @maxGeometryInputComponents@ is the maximum number of components of-    -- input variables which /can/ be provided as inputs to the geometry shader-    -- stage.-    maxGeometryInputComponents :: Word32-  , -- | @maxGeometryOutputComponents@ is the maximum number of components of-    -- output variables which /can/ be output from the geometry shader stage.-    maxGeometryOutputComponents :: Word32-  , -- | @maxGeometryOutputVertices@ is the maximum number of vertices which-    -- /can/ be emitted by any geometry shader.-    maxGeometryOutputVertices :: Word32-  , -- | @maxGeometryTotalOutputComponents@ is the maximum total number of-    -- components of output, across all emitted vertices, which /can/ be output-    -- from the geometry shader stage.-    maxGeometryTotalOutputComponents :: Word32-  , -- | @maxFragmentInputComponents@ is the maximum number of components of-    -- input variables which /can/ be provided as inputs to the fragment shader-    -- stage.-    maxFragmentInputComponents :: Word32-  , -- | @maxFragmentOutputAttachments@ is the maximum number of output-    -- attachments which /can/ be written to by the fragment shader stage.-    maxFragmentOutputAttachments :: Word32-  , -- | @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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dualSrcBlend>.-    maxFragmentDualSrcAttachments :: Word32-  , -- | @maxFragmentCombinedOutputResources@ is the total number of storage-    -- buffers, storage images, and output @Location@ decorated color-    -- attachments (described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-fragmentoutput Fragment Output Interface>)-    -- which /can/ be used in the fragment shader stage.-    maxFragmentCombinedOutputResources :: Word32-  , -- | @maxComputeSharedMemorySize@ is the maximum total storage size, in-    -- bytes, available for variables declared with the @Workgroup@ storage-    -- class in shader modules (or with the @shared@ storage qualifier in GLSL)-    -- in the compute shader stage. The amount of storage consumed by the-    -- variables declared with the @Workgroup@ storage class is-    -- implementation-dependent. However, the amount of storage consumed may-    -- not exceed the largest block size that would be obtained if all active-    -- variables declared with @Workgroup@ storage class were assigned offsets-    -- in an arbitrary order by successively taking the smallest valid offset-    -- according to the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Storage Buffer Layout>-    -- rules. (This is equivalent to using the GLSL std430 layout rules.)-    maxComputeSharedMemorySize :: Word32-  , -- | @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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dispatch>.-    maxComputeWorkGroupCount :: (Word32, Word32, Word32)-  , -- | @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 or by the object decorated by the @WorkgroupSize@ decoration,-    -- /must/ be less than or equal to this limit.-    maxComputeWorkGroupInvocations :: Word32-  , -- | @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, as specified by the @LocalSize@ execution mode or by-    -- the object decorated by the @WorkgroupSize@ decoration in shader-    -- modules, /must/ be less than or equal to the corresponding limit.-    maxComputeWorkGroupSize :: (Word32, Word32, Word32)-  , -- | @subPixelPrecisionBits@ is the number of bits of subpixel precision in-    -- framebuffer coordinates xf and yf. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast>.-    subPixelPrecisionBits :: Word32-  , -- | @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.-    subTexelPrecisionBits :: Word32-  , -- | @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.-    mipmapPrecisionBits :: Word32-  , -- | @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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fullDrawIndexUint32 fullDrawIndexUint32>.-    maxDrawIndexedIndexValue :: Word32-  , -- | @maxDrawIndirectCount@ is the maximum draw count that is supported for-    -- indirect draw calls. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multiDrawIndirect>.-    maxDrawIndirectCount :: Word32-  , -- | @maxSamplerLodBias@ is the maximum absolute sampler LOD bias. The sum of-    -- the @mipLodBias@ member of the 'Vulkan.Core10.Sampler.SamplerCreateInfo'-    -- 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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-mipLodBias>.-    maxSamplerLodBias :: Float-  , -- | @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-    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure and this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-maxAnisotropy>.-    maxSamplerAnisotropy :: Float-  , -- | @maxViewports@ is the maximum number of active viewports. The-    -- @viewportCount@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' structure that-    -- is provided at pipeline creation /must/ be less than or equal to this-    -- limit.-    maxViewports :: Word32-  , -- | @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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport Controlling the Viewport>.-    maxViewportDimensions :: (Word32, Word32)-  , -- | @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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport Controlling the 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.-    viewportBoundsRange :: (Float, Float)-  , -- | @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.-    viewportSubPixelBits :: Word32-  , -- | @minMemoryMapAlignment@ is the minimum /required/ alignment, in bytes,-    -- of host visible memory allocations within the host address space. When-    -- mapping a memory allocation with 'Vulkan.Core10.Memory.mapMemory',-    -- subtracting @offset@ bytes from the returned pointer will always produce-    -- an integer multiple of this limit. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess>.-    minMemoryMapAlignment :: Word64-  , -- | @minTexelBufferOffsetAlignment@ is the minimum /required/ alignment, in-    -- bytes, for the @offset@ member of the-    -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo' structure for texel-    -- buffers. If-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>-    -- is enabled, this limit is equivalent to the maximum of the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetAlignmentBytes uniformTexelBufferOffsetAlignmentBytes>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetAlignmentBytes storageTexelBufferOffsetAlignmentBytes>-    -- members of-    -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',-    -- but smaller alignment is optionally: allowed by-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetSingleTexelAlignment storageTexelBufferOffsetSingleTexelAlignment>-    -- and-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetSingleTexelAlignment uniformTexelBufferOffsetSingleTexelAlignment>.-    -- If-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>-    -- is not enabled,-    -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo'::@offset@ /must/ be a-    -- multiple of this value.-    minTexelBufferOffsetAlignment :: DeviceSize-  , -- | @minUniformBufferOffsetAlignment@ is the minimum /required/ alignment,-    -- in bytes, for the @offset@ member of the-    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structure for uniform-    -- buffers. When a descriptor of type-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.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.-    minUniformBufferOffsetAlignment :: DeviceSize-  , -- | @minStorageBufferOffsetAlignment@ is the minimum /required/ alignment,-    -- in bytes, for the @offset@ member of the-    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structure for storage-    -- buffers. When a descriptor of type-    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or-    -- 'Vulkan.Core10.Enums.DescriptorType.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.-    minStorageBufferOffsetAlignment :: DeviceSize-  , -- | @minTexelOffset@ is the minimum offset value for the @ConstOffset@ image-    -- operand of any of the @OpImageSample@* or @OpImageFetch@* image-    -- instructions.-    minTexelOffset :: Int32-  , -- | @maxTexelOffset@ is the maximum offset value for the @ConstOffset@ image-    -- operand of any of the @OpImageSample@* or @OpImageFetch@* image-    -- instructions.-    maxTexelOffset :: Word32-  , -- | @minTexelGatherOffset@ is the minimum offset value for the @Offset@,-    -- @ConstOffset@, or @ConstOffsets@ image operands of any of the-    -- @OpImage@*@Gather@ image instructions.-    minTexelGatherOffset :: Int32-  , -- | @maxTexelGatherOffset@ is the maximum offset value for the @Offset@,-    -- @ConstOffset@, or @ConstOffsets@ image operands of any of the-    -- @OpImage@*@Gather@ image instructions.-    maxTexelGatherOffset :: Word32-  , -- | @minInterpolationOffset@ is the base minimum (inclusive) negative offset-    -- value for the @Offset@ operand of the @InterpolateAtOffset@ extended-    -- instruction.-    minInterpolationOffset :: Float-  , -- | @maxInterpolationOffset@ is the base maximum (inclusive) positive offset-    -- value for the @Offset@ operand of the @InterpolateAtOffset@ extended-    -- instruction.-    maxInterpolationOffset :: Float-  , -- | @subPixelInterpolationOffsetBits@ is the number of fractional bits that-    -- the @x@ and @y@ offsets to the @InterpolateAtOffset@ extended-    -- instruction /may/ be rounded to as fixed-point values.-    subPixelInterpolationOffsetBits :: Word32-  , -- | @maxFramebufferWidth@ is the maximum width for a framebuffer. The-    -- @width@ member of the 'Vulkan.Core10.Pass.FramebufferCreateInfo'-    -- structure /must/ be less than or equal to this limit.-    maxFramebufferWidth :: Word32-  , -- | @maxFramebufferHeight@ is the maximum height for a framebuffer. The-    -- @height@ member of the 'Vulkan.Core10.Pass.FramebufferCreateInfo'-    -- structure /must/ be less than or equal to this limit.-    maxFramebufferHeight :: Word32-  , -- | @maxFramebufferLayers@ is the maximum layer count for a layered-    -- framebuffer. The @layers@ member of the-    -- 'Vulkan.Core10.Pass.FramebufferCreateInfo' structure /must/ be less than-    -- or equal to this limit.-    maxFramebufferLayers :: Word32-  , -- | @framebufferColorSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the color sample counts that are supported for all framebuffer color-    -- attachments with floating- or fixed-point formats. For color attachments-    -- with integer formats, see-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-framebufferIntegerColorSampleCounts framebufferIntegerColorSampleCounts>.-    framebufferColorSampleCounts :: SampleCountFlags-  , -- | @framebufferDepthSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the supported depth sample counts for all framebuffer depth\/stencil-    -- attachments, when the format includes a depth component.-    framebufferDepthSampleCounts :: SampleCountFlags-  , -- | @framebufferStencilSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the supported stencil sample counts for all framebuffer depth\/stencil-    -- attachments, when the format includes a stencil component.-    framebufferStencilSampleCounts :: SampleCountFlags-  , -- | @framebufferNoAttachmentsSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the supported sample counts for a-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments subpass which uses no attachments>.-    framebufferNoAttachmentsSampleCounts :: SampleCountFlags-  , -- | @maxColorAttachments@ is the maximum number of color attachments that-    -- /can/ be used by a subpass in a render pass. The @colorAttachmentCount@-    -- member of the 'Vulkan.Core10.Pass.SubpassDescription' or-    -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2'-    -- structure /must/ be less than or equal to this limit.-    maxColorAttachments :: Word32-  , -- | @sampledImageColorSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the sample counts supported for all 2D images created with-    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@-    -- containing-    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a-    -- non-integer color format.-    sampledImageColorSampleCounts :: SampleCountFlags-  , -- | @sampledImageIntegerSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the sample counts supported for all 2D images created with-    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@-    -- containing-    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and an-    -- integer color format.-    sampledImageIntegerSampleCounts :: SampleCountFlags-  , -- | @sampledImageDepthSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the sample counts supported for all 2D images created with-    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@-    -- containing-    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a-    -- depth format.-    sampledImageDepthSampleCounts :: SampleCountFlags-  , -- | @sampledImageStencilSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the sample supported for all 2D images created with-    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@-    -- containing-    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a-    -- stencil format.-    sampledImageStencilSampleCounts :: SampleCountFlags-  , -- | @storageImageSampleCounts@ is a bitmask1 of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the sample counts supported for all 2D images created with-    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', and @usage@-    -- containing-    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'.-    storageImageSampleCounts :: SampleCountFlags-  , -- | @maxSampleMaskWords@ is the maximum number of array elements of a-    -- variable decorated with the 'Vulkan.Core10.FundamentalTypes.SampleMask'-    -- built-in decoration.-    maxSampleMaskWords :: Word32-  , -- | @timestampComputeAndGraphics@ specifies support for timestamps on all-    -- graphics and compute queues. If this limit is set to-    -- 'Vulkan.Core10.FundamentalTypes.TRUE', all queues that advertise the-    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or-    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' in the-    -- 'QueueFamilyProperties'::@queueFlags@ support-    -- 'QueueFamilyProperties'::@timestampValidBits@ of at least 36. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps Timestamp Queries>.-    timestampComputeAndGraphics :: Bool-  , -- | @timestampPeriod@ is the number of nanoseconds /required/ for a-    -- timestamp query to be incremented by 1. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps Timestamp Queries>.-    timestampPeriod :: Float-  , -- | @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.-    maxClipDistances :: Word32-  , -- | @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.-    maxCullDistances :: Word32-  , -- | @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.-    maxCombinedClipAndCullDistances :: Word32-  , -- | @discreteQueuePriorities@ is the number of discrete priorities that-    -- /can/ be assigned to a queue based on the value of each member of-    -- 'Vulkan.Core10.Device.DeviceQueueCreateInfo'::@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-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-priority>.-    discreteQueuePriorities :: Word32-  , -- | @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.-    pointSizeRange :: (Float, Float)-  , -- | @lineWidthRange@[2] is the range [@minimum@,@maximum@] of supported-    -- widths for lines. Values specified by the @lineWidth@ member of the-    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' or the-    -- @lineWidth@ parameter to-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' are clamped to-    -- this range.-    lineWidthRange :: (Float, Float)-  , -- | @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.-    pointSizeGranularity :: Float-  , -- | @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.-    lineWidthGranularity :: Float-  , -- | @strictLines@ specifies whether lines are rasterized according to the-    -- preferred method of rasterization. If set to-    -- 'Vulkan.Core10.FundamentalTypes.FALSE', lines /may/ be rasterized under-    -- a relaxed set of rules. If set to 'Vulkan.Core10.FundamentalTypes.TRUE',-    -- lines are rasterized as per the strict definition. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-basic Basic Line Segment Rasterization>.-    strictLines :: Bool-  , -- | @standardSampleLocations@ specifies whether rasterization uses the-    -- standard sample locations as documented in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling Multisampling>.-    -- If set to 'Vulkan.Core10.FundamentalTypes.TRUE', the implementation uses-    -- the documented sample locations. If set to-    -- 'Vulkan.Core10.FundamentalTypes.FALSE', the implementation /may/ use-    -- different sample locations.-    standardSampleLocations :: Bool-  , -- | @optimalBufferCopyOffsetAlignment@ is the optimal buffer offset-    -- alignment in bytes for-    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyBufferToImage2KHR',-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',-    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyImageToBuffer2KHR', and-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. The per-    -- texel alignment requirements are enforced, but applications /should/ use-    -- the optimal alignment for optimal performance and power use.-    optimalBufferCopyOffsetAlignment :: DeviceSize-  , -- | @optimalBufferCopyRowPitchAlignment@ is the optimal buffer row pitch-    -- alignment in bytes for-    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyBufferToImage2KHR',-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',-    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyImageToBuffer2KHR', and-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. 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.-    optimalBufferCopyRowPitchAlignment :: DeviceSize-  , -- | @nonCoherentAtomSize@ is the size and alignment in bytes that bounds-    -- concurrent access to+-- -   #VUID-vkCreateInstance-ppEnabledExtensionNames-01388# All+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required extensions>+--     for each extension in the+--     'InstanceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be+--     present in that list+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCreateInstance-pCreateInfo-parameter# @pCreateInfo@ /must/+--     be a valid pointer to a valid 'InstanceCreateInfo' structure+--+-- -   #VUID-vkCreateInstance-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+--+-- -   #VUID-vkCreateInstance-pInstance-parameter# @pInstance@ /must/ be a+--     valid pointer to a 'Vulkan.Core10.Handles.Instance' handle+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_LAYER_NOT_PRESENT'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER'+--+-- = See Also+--+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',+-- 'Vulkan.Core10.Handles.Instance', 'InstanceCreateInfo'+createInstance :: forall a io+                . (Extendss InstanceCreateInfo a, PokeChain a, MonadIO io)+               => -- | @pCreateInfo@ is a pointer to a 'InstanceCreateInfo' structure+                  -- controlling creation of the instance.+                  (InstanceCreateInfo a)+               -> -- | @pAllocator@ controls host memory allocation as described in the+                  -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>+                  -- chapter.+                  ("allocator" ::: Maybe AllocationCallbacks)+               -> io (Instance)+createInstance createInfo allocator = liftIO . evalContT $ do+  vkCreateInstancePtr <- lift $ castFunPtr @_ @(("pCreateInfo" ::: Ptr (SomeStruct InstanceCreateInfo)) -> ("pAllocator" ::: Ptr AllocationCallbacks) -> ("pInstance" ::: Ptr (Ptr Instance_T)) -> IO Result) <$> getInstanceProcAddr' nullPtr (Ptr "vkCreateInstance"#)+  lift $ unless (vkCreateInstancePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateInstance is null" Nothing Nothing+  let vkCreateInstance' = mkVkCreateInstance vkCreateInstancePtr+  pCreateInfo <- ContT $ withCStruct (createInfo)+  pAllocator <- case (allocator) of+    Nothing -> pure nullPtr+    Just j -> ContT $ withCStruct (j)+  pPInstance <- ContT $ bracket (callocBytes @(Ptr Instance_T) 8) free+  r <- lift $ vkCreateInstance' (forgetExtensions pCreateInfo) pAllocator (pPInstance)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pInstance <- lift $ peek @(Ptr Instance_T) pPInstance+  pInstance' <- lift $ (\h -> Instance h <$> initInstanceCmds h) pInstance+  pure $ (pInstance')++-- | A convenience wrapper to make a compatible pair of calls to+-- 'createInstance' and 'destroyInstance'+--+-- To ensure that 'destroyInstance' is always called: pass+-- 'Control.Exception.bracket' (or the allocate function from your+-- favourite resource management library) as the first argument.+-- To just extract the pair pass '(,)' as the first argument.+--+withInstance :: forall a io r . (Extendss InstanceCreateInfo a, PokeChain a, MonadIO io) => InstanceCreateInfo a -> Maybe AllocationCallbacks -> (io (Instance) -> ((Instance) -> io ()) -> r) -> r+withInstance pCreateInfo pAllocator b =+  b (createInstance pCreateInfo pAllocator)+    (\(o0) -> destroyInstance o0 pAllocator)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkDestroyInstance+  :: FunPtr (Ptr Instance_T -> Ptr AllocationCallbacks -> IO ()) -> Ptr Instance_T -> Ptr AllocationCallbacks -> IO ()++-- | vkDestroyInstance - Destroy an instance of Vulkan+--+-- == Valid Usage+--+-- -   #VUID-vkDestroyInstance-instance-00629# All child objects created+--     using @instance@ /must/ have been destroyed prior to destroying+--     @instance@+--+-- -   #VUID-vkDestroyInstance-instance-00630# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+--     provided when @instance@ was created, a compatible set of callbacks+--     /must/ be provided here+--+-- -   #VUID-vkDestroyInstance-instance-00631# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+--     provided when @instance@ was created, @pAllocator@ /must/ be @NULL@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkDestroyInstance-instance-parameter# If @instance@ is not+--     @NULL@, @instance@ /must/ be a valid+--     'Vulkan.Core10.Handles.Instance' handle+--+-- -   #VUID-vkDestroyInstance-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+--+-- == Host Synchronization+--+-- -   Host access to @instance@ /must/ be externally synchronized+--+-- -   Host access to all 'Vulkan.Core10.Handles.PhysicalDevice' objects+--     enumerated from @instance@ /must/ be externally synchronized+--+-- = See Also+--+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',+-- 'Vulkan.Core10.Handles.Instance'+destroyInstance :: forall io+                 . (MonadIO io)+                => -- | @instance@ is the handle of the instance to destroy.+                   Instance+                -> -- | @pAllocator@ controls host memory allocation as described in the+                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>+                   -- chapter.+                   ("allocator" ::: Maybe AllocationCallbacks)+                -> io ()+destroyInstance instance' allocator = liftIO . evalContT $ do+  let vkDestroyInstancePtr = pVkDestroyInstance (instanceCmds (instance' :: Instance))+  lift $ unless (vkDestroyInstancePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyInstance is null" Nothing Nothing+  let vkDestroyInstance' = mkVkDestroyInstance vkDestroyInstancePtr+  pAllocator <- case (allocator) of+    Nothing -> pure nullPtr+    Just j -> ContT $ withCStruct (j)+  lift $ vkDestroyInstance' (instanceHandle (instance')) pAllocator+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkEnumeratePhysicalDevices+  :: FunPtr (Ptr Instance_T -> Ptr Word32 -> Ptr (Ptr PhysicalDevice_T) -> IO Result) -> Ptr Instance_T -> Ptr Word32 -> Ptr (Ptr PhysicalDevice_T) -> IO Result++-- | vkEnumeratePhysicalDevices - Enumerates the physical devices accessible+-- to a Vulkan instance+--+-- = 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, 'Vulkan.Core10.Enums.Result.INCOMPLETE' will+-- be returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate+-- that not all the available physical devices were returned.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkEnumeratePhysicalDevices-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+--+-- -   #VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter#+--     @pPhysicalDeviceCount@ /must/ be a valid pointer to a @uint32_t@+--     value+--+-- -   #VUID-vkEnumeratePhysicalDevices-pPhysicalDevices-parameter# 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@+--     'Vulkan.Core10.Handles.PhysicalDevice' handles+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Instance', 'Vulkan.Core10.Handles.PhysicalDevice'+enumeratePhysicalDevices :: forall io+                          . (MonadIO io)+                         => -- | @instance@ is a handle to a Vulkan instance previously created with+                            -- 'createInstance'.+                            Instance+                         -> io (Result, ("physicalDevices" ::: Vector PhysicalDevice))+enumeratePhysicalDevices instance' = liftIO . evalContT $ do+  let cmds = instanceCmds (instance' :: Instance)+  let vkEnumeratePhysicalDevicesPtr = pVkEnumeratePhysicalDevices cmds+  lift $ unless (vkEnumeratePhysicalDevicesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkEnumeratePhysicalDevices is null" Nothing Nothing+  let vkEnumeratePhysicalDevices' = mkVkEnumeratePhysicalDevices vkEnumeratePhysicalDevicesPtr+  let instance'' = instanceHandle (instance')+  pPPhysicalDeviceCount <- ContT $ bracket (callocBytes @Word32 4) free+  r <- lift $ vkEnumeratePhysicalDevices' instance'' (pPPhysicalDeviceCount) (nullPtr)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pPhysicalDeviceCount <- lift $ peek @Word32 pPPhysicalDeviceCount+  pPPhysicalDevices <- ContT $ bracket (callocBytes @(Ptr PhysicalDevice_T) ((fromIntegral (pPhysicalDeviceCount)) * 8)) free+  r' <- lift $ vkEnumeratePhysicalDevices' instance'' (pPPhysicalDeviceCount) (pPPhysicalDevices)+  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))+  pPhysicalDeviceCount' <- lift $ peek @Word32 pPPhysicalDeviceCount+  pPhysicalDevices' <- lift $ generateM (fromIntegral (pPhysicalDeviceCount')) (\i -> do+    pPhysicalDevicesElem <- peek @(Ptr PhysicalDevice_T) ((pPPhysicalDevices `advancePtrBytes` (8 * (i)) :: Ptr (Ptr PhysicalDevice_T)))+    pure $ (\h -> PhysicalDevice h cmds ) pPhysicalDevicesElem)+  pure $ ((r'), pPhysicalDevices')+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetDeviceProcAddr+  :: FunPtr (Ptr Device_T -> Ptr CChar -> IO PFN_vkVoidFunction) -> Ptr Device_T -> Ptr CChar -> IO PFN_vkVoidFunction++-- | vkGetDeviceProcAddr - Return a function pointer for a command+--+-- = Parameters+--+-- The table below defines the various use cases for 'getDeviceProcAddr'+-- and expected return value for each case.+--+-- = Description+--+-- The returned function pointer is of type+-- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be cast to+-- the type of the command being queried before use. 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@               | *1                   | undefined             |+-- +----------------------+----------------------+-----------------------++-- | invalid device       | *1                   | undefined             |+-- +----------------------+----------------------+-----------------------++-- | device               | @NULL@               | undefined             |+-- +----------------------+----------------------+-----------------------++-- | device               | core device-level    | fp2                   |+-- |                      | Vulkan command       |                       |+-- +----------------------+----------------------+-----------------------++-- | device               | enabled extension    | fp2                   |+-- |                      | device-level         |                       |+-- |                      | commands             |                       |+-- +----------------------+----------------------+-----------------------++-- | any other case, not  |                      | @NULL@                |+-- | covered above        |                      |                       |+-- +----------------------+----------------------+-----------------------++--+-- 'getDeviceProcAddr' behavior+--+-- [1]+--     \"*\" means any representable value for the parameter (including+--     valid values, invalid values, and @NULL@).+--+-- [2]+--     The returned function pointer /must/ only be called with a+--     dispatchable object (the first parameter) that is @device@ or a+--     child of @device@ e.g. 'Vulkan.Core10.Handles.Device',+--     'Vulkan.Core10.Handles.Queue', or+--     'Vulkan.Core10.Handles.CommandBuffer'.+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction',+-- 'Vulkan.Core10.Handles.Device'+getDeviceProcAddr :: forall io+                   . (MonadIO io)+                  => -- | #VUID-vkGetDeviceProcAddr-device-parameter# @device@ /must/ be a valid+                     -- 'Vulkan.Core10.Handles.Device' handle+                     Device+                  -> -- | #VUID-vkGetDeviceProcAddr-pName-parameter# @pName@ /must/ be a+                     -- null-terminated UTF-8 string+                     ("name" ::: ByteString)+                  -> io (PFN_vkVoidFunction)+getDeviceProcAddr device name = liftIO . evalContT $ do+  let vkGetDeviceProcAddrPtr = pVkGetDeviceProcAddr (deviceCmds (device :: Device))+  lift $ unless (vkGetDeviceProcAddrPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceProcAddr is null" Nothing Nothing+  let vkGetDeviceProcAddr' = mkVkGetDeviceProcAddr vkGetDeviceProcAddrPtr+  pName <- ContT $ useAsCString (name)+  r <- lift $ vkGetDeviceProcAddr' (deviceHandle (device)) pName+  pure $ (r)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetInstanceProcAddr+  :: FunPtr (Ptr Instance_T -> Ptr CChar -> IO PFN_vkVoidFunction) -> Ptr Instance_T -> Ptr CChar -> IO PFN_vkVoidFunction++-- | vkGetInstanceProcAddr - Return a function pointer for a command+--+-- = Description+--+-- 'getInstanceProcAddr' 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 'getInstanceProcAddr'+-- and expected return value (“fp” is “function pointer”) for each case.+--+-- The returned function pointer is of type+-- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction', and /must/ be cast to+-- the type of the command being queried before use.+--+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | @instance@           | @pName@                                                                 | return value          |+-- +======================+=========================================================================+=======================++-- | *1                   | @NULL@                                                                  | undefined             |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | invalid non-@NULL@   | *1                                                                      | undefined             |+-- | instance             |                                                                         |                       |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | @NULL@               | 'getInstanceProcAddr'                                                   | fp4                   |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | @NULL@               | 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'           | fp                    |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | @NULL@               | 'Vulkan.Core10.ExtensionDiscovery.enumerateInstanceExtensionProperties' | fp                    |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | @NULL@               | 'Vulkan.Core10.LayerDiscovery.enumerateInstanceLayerProperties'         | fp                    |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | @NULL@               | 'createInstance'                                                        | fp                    |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | instance             | core Vulkan command                                                     | fp2                   |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | instance             | enabled instance extension commands for @instance@                      | fp2                   |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | instance             | available device extension3 commands for @instance@                     | fp2                   |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++-- | any other case, not  |                                                                         | @NULL@                |+-- | covered above        |                                                                         |                       |+-- +----------------------+-------------------------------------------------------------------------+-----------------------++--+-- 'getInstanceProcAddr' behavior+--+-- [1]+--     \"*\" means any representable value for the parameter (including+--     valid values, invalid values, and @NULL@).+--+-- [2]+--     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. 'Vulkan.Core10.Handles.Instance',+--     'Vulkan.Core10.Handles.PhysicalDevice',+--     'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Queue', or+--     'Vulkan.Core10.Handles.CommandBuffer'.+--+-- [3]+--     An “available device extension” is a device extension supported by+--     any physical device enumerated by @instance@.+--+-- [4]+--     Starting with Vulkan 1.2, 'getInstanceProcAddr' can resolve itself+--     with a @NULL@ instance pointer.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkGetInstanceProcAddr-instance-parameter# If @instance@ is not+--     @NULL@, @instance@ /must/ be a valid+--     'Vulkan.Core10.Handles.Instance' handle+--+-- -   #VUID-vkGetInstanceProcAddr-pName-parameter# @pName@ /must/ be a+--     null-terminated UTF-8 string+--+-- = See Also+--+-- 'Vulkan.Core10.FuncPointers.PFN_vkVoidFunction',+-- 'Vulkan.Core10.Handles.Instance'+getInstanceProcAddr :: forall io+                     . (MonadIO io)+                    => -- | @instance@ is the instance that the function pointer will be compatible+                       -- with, or @NULL@ for commands not dependent on any instance.+                       Instance+                    -> -- | @pName@ is the name of the command to obtain.+                       ("name" ::: ByteString)+                    -> io (PFN_vkVoidFunction)+getInstanceProcAddr instance' name = liftIO . evalContT $ do+  let vkGetInstanceProcAddrPtr = pVkGetInstanceProcAddr (instanceCmds (instance' :: Instance))+  lift $ unless (vkGetInstanceProcAddrPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetInstanceProcAddr is null" Nothing Nothing+  let vkGetInstanceProcAddr' = mkVkGetInstanceProcAddr vkGetInstanceProcAddrPtr+  pName <- ContT $ useAsCString (name)+  r <- lift $ vkGetInstanceProcAddr' (instanceHandle (instance')) pName+  pure $ (r)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetPhysicalDeviceProperties+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceProperties -> IO ()++-- | vkGetPhysicalDeviceProperties - Returns properties of a physical device+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceProperties'+getPhysicalDeviceProperties :: forall io+                             . (MonadIO io)+                            => -- | @physicalDevice@ is the handle to the physical device whose properties+                               -- will be queried.+                               --+                               -- #VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter#+                               -- @physicalDevice@ /must/ be a valid+                               -- 'Vulkan.Core10.Handles.PhysicalDevice' handle+                               PhysicalDevice+                            -> io (PhysicalDeviceProperties)+getPhysicalDeviceProperties physicalDevice = liftIO . evalContT $ do+  let vkGetPhysicalDevicePropertiesPtr = pVkGetPhysicalDeviceProperties (instanceCmds (physicalDevice :: PhysicalDevice))+  lift $ unless (vkGetPhysicalDevicePropertiesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceProperties is null" Nothing Nothing+  let vkGetPhysicalDeviceProperties' = mkVkGetPhysicalDeviceProperties vkGetPhysicalDevicePropertiesPtr+  pPProperties <- ContT (withZeroCStruct @PhysicalDeviceProperties)+  lift $ vkGetPhysicalDeviceProperties' (physicalDeviceHandle (physicalDevice)) (pPProperties)+  pProperties <- lift $ peekCStruct @PhysicalDeviceProperties pPProperties+  pure $ (pProperties)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetPhysicalDeviceQueueFamilyProperties+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr QueueFamilyProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr Word32 -> Ptr QueueFamilyProperties -> IO ()++-- | vkGetPhysicalDeviceQueueFamilyProperties - Reports properties of the+-- queues of the specified physical device+--+-- = Description+--+-- If @pQueueFamilyProperties@ is @NULL@, then the number of queue families+-- available is returned in @pQueueFamilyPropertyCount@. Implementations+-- /must/ support at least one queue family. 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)+--+-- -   #VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid+--     'Vulkan.Core10.Handles.PhysicalDevice' handle+--+-- -   #VUID-vkGetPhysicalDeviceQueueFamilyProperties-pQueueFamilyPropertyCount-parameter#+--     @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a+--     @uint32_t@ value+--+-- -   #VUID-vkGetPhysicalDeviceQueueFamilyProperties-pQueueFamilyProperties-parameter#+--     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@+--     'QueueFamilyProperties' structures+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'QueueFamilyProperties'+getPhysicalDeviceQueueFamilyProperties :: forall io+                                        . (MonadIO io)+                                       => -- | @physicalDevice@ is the handle to the physical device whose properties+                                          -- will be queried.+                                          PhysicalDevice+                                       -> io (("queueFamilyProperties" ::: Vector QueueFamilyProperties))+getPhysicalDeviceQueueFamilyProperties physicalDevice = liftIO . evalContT $ do+  let vkGetPhysicalDeviceQueueFamilyPropertiesPtr = pVkGetPhysicalDeviceQueueFamilyProperties (instanceCmds (physicalDevice :: PhysicalDevice))+  lift $ unless (vkGetPhysicalDeviceQueueFamilyPropertiesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceQueueFamilyProperties is null" Nothing Nothing+  let vkGetPhysicalDeviceQueueFamilyProperties' = mkVkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyPropertiesPtr+  let physicalDevice' = physicalDeviceHandle (physicalDevice)+  pPQueueFamilyPropertyCount <- ContT $ bracket (callocBytes @Word32 4) free+  lift $ vkGetPhysicalDeviceQueueFamilyProperties' physicalDevice' (pPQueueFamilyPropertyCount) (nullPtr)+  pQueueFamilyPropertyCount <- lift $ peek @Word32 pPQueueFamilyPropertyCount+  pPQueueFamilyProperties <- ContT $ bracket (callocBytes @QueueFamilyProperties ((fromIntegral (pQueueFamilyPropertyCount)) * 24)) free+  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPQueueFamilyProperties `advancePtrBytes` (i * 24) :: Ptr QueueFamilyProperties) . ($ ())) [0..(fromIntegral (pQueueFamilyPropertyCount)) - 1]+  lift $ vkGetPhysicalDeviceQueueFamilyProperties' physicalDevice' (pPQueueFamilyPropertyCount) ((pPQueueFamilyProperties))+  pQueueFamilyPropertyCount' <- lift $ peek @Word32 pPQueueFamilyPropertyCount+  pQueueFamilyProperties' <- lift $ generateM (fromIntegral (pQueueFamilyPropertyCount')) (\i -> peekCStruct @QueueFamilyProperties (((pPQueueFamilyProperties) `advancePtrBytes` (24 * (i)) :: Ptr QueueFamilyProperties)))+  pure $ (pQueueFamilyProperties')+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetPhysicalDeviceMemoryProperties+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceMemoryProperties -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceMemoryProperties -> IO ()++-- | vkGetPhysicalDeviceMemoryProperties - Reports memory information for the+-- specified physical device+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceMemoryProperties'+getPhysicalDeviceMemoryProperties :: forall io+                                   . (MonadIO io)+                                  => -- | @physicalDevice@ is the handle to the device to query.+                                     --+                                     -- #VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter#+                                     -- @physicalDevice@ /must/ be a valid+                                     -- 'Vulkan.Core10.Handles.PhysicalDevice' handle+                                     PhysicalDevice+                                  -> io (PhysicalDeviceMemoryProperties)+getPhysicalDeviceMemoryProperties physicalDevice = liftIO . evalContT $ do+  let vkGetPhysicalDeviceMemoryPropertiesPtr = pVkGetPhysicalDeviceMemoryProperties (instanceCmds (physicalDevice :: PhysicalDevice))+  lift $ unless (vkGetPhysicalDeviceMemoryPropertiesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceMemoryProperties is null" Nothing Nothing+  let vkGetPhysicalDeviceMemoryProperties' = mkVkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryPropertiesPtr+  pPMemoryProperties <- ContT (withZeroCStruct @PhysicalDeviceMemoryProperties)+  lift $ vkGetPhysicalDeviceMemoryProperties' (physicalDeviceHandle (physicalDevice)) (pPMemoryProperties)+  pMemoryProperties <- lift $ peekCStruct @PhysicalDeviceMemoryProperties pPMemoryProperties+  pure $ (pMemoryProperties)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetPhysicalDeviceFeatures+  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceFeatures -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceFeatures -> IO ()++-- | vkGetPhysicalDeviceFeatures - Reports capabilities of a physical device+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.PhysicalDevice', 'PhysicalDeviceFeatures'+getPhysicalDeviceFeatures :: forall io+                           . (MonadIO io)+                          => -- | @physicalDevice@ is the physical device from which to query the+                             -- supported features.+                             --+                             -- #VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter#+                             -- @physicalDevice@ /must/ be a valid+                             -- 'Vulkan.Core10.Handles.PhysicalDevice' handle+                             PhysicalDevice+                          -> io (PhysicalDeviceFeatures)+getPhysicalDeviceFeatures physicalDevice = liftIO . evalContT $ do+  let vkGetPhysicalDeviceFeaturesPtr = pVkGetPhysicalDeviceFeatures (instanceCmds (physicalDevice :: PhysicalDevice))+  lift $ unless (vkGetPhysicalDeviceFeaturesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceFeatures is null" Nothing Nothing+  let vkGetPhysicalDeviceFeatures' = mkVkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeaturesPtr+  pPFeatures <- ContT (withZeroCStruct @PhysicalDeviceFeatures)+  lift $ vkGetPhysicalDeviceFeatures' (physicalDeviceHandle (physicalDevice)) (pPFeatures)+  pFeatures <- lift $ peekCStruct @PhysicalDeviceFeatures pPFeatures+  pure $ (pFeatures)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetPhysicalDeviceFormatProperties+  :: FunPtr (Ptr PhysicalDevice_T -> Format -> Ptr FormatProperties -> IO ()) -> Ptr PhysicalDevice_T -> Format -> Ptr FormatProperties -> IO ()++-- | vkGetPhysicalDeviceFormatProperties - Lists physical device’s format+-- capabilities+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.Format.Format', 'FormatProperties',+-- 'Vulkan.Core10.Handles.PhysicalDevice'+getPhysicalDeviceFormatProperties :: forall io+                                   . (MonadIO io)+                                  => -- | @physicalDevice@ is the physical device from which to query the format+                                     -- properties.+                                     --+                                     -- #VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter#+                                     -- @physicalDevice@ /must/ be a valid+                                     -- 'Vulkan.Core10.Handles.PhysicalDevice' handle+                                     PhysicalDevice+                                  -> -- | @format@ is the format whose properties are queried.+                                     --+                                     -- #VUID-vkGetPhysicalDeviceFormatProperties-format-parameter# @format@+                                     -- /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+                                     Format+                                  -> io (FormatProperties)+getPhysicalDeviceFormatProperties physicalDevice format = liftIO . evalContT $ do+  let vkGetPhysicalDeviceFormatPropertiesPtr = pVkGetPhysicalDeviceFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice))+  lift $ unless (vkGetPhysicalDeviceFormatPropertiesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceFormatProperties is null" Nothing Nothing+  let vkGetPhysicalDeviceFormatProperties' = mkVkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatPropertiesPtr+  pPFormatProperties <- ContT (withZeroCStruct @FormatProperties)+  lift $ vkGetPhysicalDeviceFormatProperties' (physicalDeviceHandle (physicalDevice)) (format) (pPFormatProperties)+  pFormatProperties <- lift $ peekCStruct @FormatProperties pPFormatProperties+  pure $ (pFormatProperties)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetPhysicalDeviceImageFormatProperties+  :: FunPtr (Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> Ptr ImageFormatProperties -> IO Result) -> Ptr PhysicalDevice_T -> Format -> ImageType -> ImageTiling -> ImageUsageFlags -> ImageCreateFlags -> Ptr ImageFormatProperties -> IO Result++-- | vkGetPhysicalDeviceImageFormatProperties - Lists physical device’s image+-- format capabilities+--+-- = Description+--+-- The @format@, @type@, @tiling@, @usage@, and @flags@ parameters+-- correspond to parameters that would be consumed by+-- 'Vulkan.Core10.Image.createImage' (as members of+-- 'Vulkan.Core10.Image.ImageCreateInfo').+--+-- 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 'getPhysicalDeviceImageFormatProperties' returns+-- 'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'.+--+-- The limitations on an image format that are reported by+-- 'getPhysicalDeviceImageFormatProperties' have the following property: if+-- @usage1@ and @usage2@ of type+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags' are such that+-- the bits set in @usage1@ are a subset of the bits set in @usage2@, and+-- @flags1@ and @flags2@ of type+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags' 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@.+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.Format.Format',+-- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlags',+-- 'ImageFormatProperties', 'Vulkan.Core10.Enums.ImageTiling.ImageTiling',+-- 'Vulkan.Core10.Enums.ImageType.ImageType',+-- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlags',+-- 'Vulkan.Core10.Handles.PhysicalDevice'+getPhysicalDeviceImageFormatProperties :: forall io+                                        . (MonadIO io)+                                       => -- | @physicalDevice@ is the physical device from which to query the image+                                          -- capabilities.+                                          --+                                          -- #VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter#+                                          -- @physicalDevice@ /must/ be a valid+                                          -- 'Vulkan.Core10.Handles.PhysicalDevice' handle+                                          PhysicalDevice+                                       -> -- | @format@ is a 'Vulkan.Core10.Enums.Format.Format' value specifying the+                                          -- image format, corresponding to+                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@format@.+                                          --+                                          -- #VUID-vkGetPhysicalDeviceImageFormatProperties-format-parameter#+                                          -- @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+                                          Format+                                       -> -- | @type@ is a 'Vulkan.Core10.Enums.ImageType.ImageType' value specifying+                                          -- the image type, corresponding to+                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.+                                          --+                                          -- #VUID-vkGetPhysicalDeviceImageFormatProperties-type-parameter# @type@+                                          -- /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType' value+                                          ImageType+                                       -> -- | @tiling@ is a 'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value+                                          -- specifying the image tiling, corresponding to+                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.+                                          --+                                          -- #VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-02248# @tiling@+                                          -- /must/ not be+                                          -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'.+                                          -- (Use+                                          -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+                                          -- instead)+                                          --+                                          -- #VUID-vkGetPhysicalDeviceImageFormatProperties-tiling-parameter#+                                          -- @tiling@ /must/ be a valid 'Vulkan.Core10.Enums.ImageTiling.ImageTiling'+                                          -- value+                                          ImageTiling+                                       -> -- | @usage@ is a bitmask of+                                          -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' specifying+                                          -- the intended usage of the image, corresponding to+                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@.+                                          --+                                          -- #VUID-vkGetPhysicalDeviceImageFormatProperties-usage-parameter# @usage@+                                          -- /must/ be a valid combination of+                                          -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values+                                          --+                                          -- #VUID-vkGetPhysicalDeviceImageFormatProperties-usage-requiredbitmask#+                                          -- @usage@ /must/ not be @0@+                                          ImageUsageFlags+                                       -> -- | @flags@ is a bitmask of+                                          -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' specifying+                                          -- additional parameters of the image, corresponding to+                                          -- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@.+                                          --+                                          -- #VUID-vkGetPhysicalDeviceImageFormatProperties-flags-parameter# @flags@+                                          -- /must/ be a valid combination of+                                          -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values+                                          ImageCreateFlags+                                       -> io (ImageFormatProperties)+getPhysicalDeviceImageFormatProperties physicalDevice format type' tiling usage flags = liftIO . evalContT $ do+  let vkGetPhysicalDeviceImageFormatPropertiesPtr = pVkGetPhysicalDeviceImageFormatProperties (instanceCmds (physicalDevice :: PhysicalDevice))+  lift $ unless (vkGetPhysicalDeviceImageFormatPropertiesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceImageFormatProperties is null" Nothing Nothing+  let vkGetPhysicalDeviceImageFormatProperties' = mkVkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatPropertiesPtr+  pPImageFormatProperties <- ContT (withZeroCStruct @ImageFormatProperties)+  r <- lift $ vkGetPhysicalDeviceImageFormatProperties' (physicalDeviceHandle (physicalDevice)) (format) (type') (tiling) (usage) (flags) (pPImageFormatProperties)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pImageFormatProperties <- lift $ peekCStruct @ImageFormatProperties pPImageFormatProperties+  pure $ (pImageFormatProperties)+++-- | VkPhysicalDeviceProperties - Structure specifying physical device+-- properties+--+-- = Description+--+-- Note+--+-- The value of @apiVersion@ /may/ be different than the version returned+-- by 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion'; either+-- higher or lower. In such cases, the application /must/ not use+-- functionality that exceeds the version of Vulkan associated with a given+-- object. The @pApiVersion@ parameter returned by+-- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion' is the+-- version associated with a 'Vulkan.Core10.Handles.Instance' and its+-- children, except for a 'Vulkan.Core10.Handles.PhysicalDevice' and its+-- children. 'PhysicalDeviceProperties'::@apiVersion@ is the version+-- associated with a 'Vulkan.Core10.Handles.PhysicalDevice' and its+-- children.+--+-- 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+-- 'Vulkan.Core10.Handles.PhysicalDevice' 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+-- <https://pcisig.com/membership/member-companies PCI vendor ID>, 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+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vulkan-styleguide Vulkan Documentation and Extensions: Procedures and Conventions>+-- 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. Khronos vendor IDs are symbolically defined+-- in the 'Vulkan.Core10.Enums.VendorId.VendorId' type.+--+-- The vendor is also responsible for the value returned in @deviceID@. If+-- the implementation is driven primarily by a+-- <https://pcisig.com/ PCI device> with a+-- <https://pcisig.com/ PCI device ID>, 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+--+-- 'PhysicalDeviceLimits',+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',+-- 'PhysicalDeviceSparseProperties',+-- 'Vulkan.Core10.Enums.PhysicalDeviceType.PhysicalDeviceType',+-- 'getPhysicalDeviceProperties'+data PhysicalDeviceProperties = PhysicalDeviceProperties+  { -- | @apiVersion@ is the version of Vulkan supported by the device, encoded+    -- as described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.+    apiVersion :: Word32+  , -- | @driverVersion@ is the vendor-specified version of the driver.+    driverVersion :: Word32+  , -- | @vendorID@ is a unique identifier for the /vendor/ (see below) of the+    -- physical device.+    vendorID :: Word32+  , -- | @deviceID@ is a unique identifier for the physical device among devices+    -- available from the vendor.+    deviceID :: Word32+  , -- | @deviceType@ is a+    -- 'Vulkan.Core10.Enums.PhysicalDeviceType.PhysicalDeviceType' specifying+    -- the type of device.+    deviceType :: PhysicalDeviceType+  , -- | @deviceName@ is an array of+    -- 'Vulkan.Core10.APIConstants.MAX_PHYSICAL_DEVICE_NAME_SIZE' @char@+    -- containing a null-terminated UTF-8 string which is the name of the+    -- device.+    deviceName :: ByteString+  , -- | @pipelineCacheUUID@ is an array of+    -- 'Vulkan.Core10.APIConstants.UUID_SIZE' @uint8_t@ values representing a+    -- universally unique identifier for the device.+    pipelineCacheUUID :: ByteString+  , -- | @limits@ is the 'PhysicalDeviceLimits' structure specifying+    -- device-specific limits of the physical device. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits Limits>+    -- for details.+    limits :: PhysicalDeviceLimits+  , -- | @sparseProperties@ is the 'PhysicalDeviceSparseProperties' structure+    -- specifying various sparse related properties of the physical device. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-physicalprops Sparse Properties>+    -- for details.+    sparseProperties :: PhysicalDeviceSparseProperties+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceProperties)+#endif+deriving instance Show PhysicalDeviceProperties++instance ToCStruct PhysicalDeviceProperties where+  withCStruct x f = allocaBytesAligned 824 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PhysicalDeviceProperties{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (apiVersion)+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (driverVersion)+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (vendorID)+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (deviceID)+    lift $ poke ((p `plusPtr` 16 :: Ptr PhysicalDeviceType)) (deviceType)+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))) (deviceName)+    lift $ pokeFixedLengthByteString ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8))) (pipelineCacheUUID)+    ContT $ pokeCStruct ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits)) (limits) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties)) (sparseProperties) . ($ ())+    lift $ f+  cStructSize = 824+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 16 :: Ptr PhysicalDeviceType)) (zero)+    lift $ pokeFixedLengthNullTerminatedByteString ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))) (mempty)+    lift $ pokeFixedLengthByteString ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8))) (mempty)+    ContT $ pokeCStruct ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties)) (zero) . ($ ())+    lift $ f++instance FromCStruct PhysicalDeviceProperties where+  peekCStruct p = do+    apiVersion <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))+    driverVersion <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    vendorID <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))+    deviceID <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))+    deviceType <- peek @PhysicalDeviceType ((p `plusPtr` 16 :: Ptr PhysicalDeviceType))+    deviceName <- packCString (lowerArrayPtr ((p `plusPtr` 20 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_NAME_SIZE CChar))))+    pipelineCacheUUID <- peekByteStringFromSizedVectorPtr ((p `plusPtr` 276 :: Ptr (FixedArray UUID_SIZE Word8)))+    limits <- peekCStruct @PhysicalDeviceLimits ((p `plusPtr` 296 :: Ptr PhysicalDeviceLimits))+    sparseProperties <- peekCStruct @PhysicalDeviceSparseProperties ((p `plusPtr` 800 :: Ptr PhysicalDeviceSparseProperties))+    pure $ PhysicalDeviceProperties+             apiVersion driverVersion vendorID deviceID deviceType deviceName pipelineCacheUUID limits sparseProperties++instance Zero PhysicalDeviceProperties where+  zero = PhysicalDeviceProperties+           zero+           zero+           zero+           zero+           zero+           mempty+           mempty+           zero+           zero+++-- | VkApplicationInfo - Structure specifying application info+--+-- = Description+--+-- Vulkan 1.0 implementations were required to return+-- 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER' if @apiVersion@+-- was larger than 1.0. Implementations that support Vulkan 1.1 or later+-- /must/ not return 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER'+-- for any value of @apiVersion@.+--+-- Note+--+-- Because Vulkan 1.0 implementations /may/ fail with+-- 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_DRIVER', applications+-- /should/ determine the version of Vulkan available before calling+-- 'createInstance'. If the 'getInstanceProcAddr' returns @NULL@ for+-- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion', it is a+-- Vulkan 1.0 implementation. Otherwise, the application /can/ call+-- 'Vulkan.Core11.DeviceInitialization.enumerateInstanceVersion' to+-- determine the version of Vulkan.+--+-- As long as the instance supports at least Vulkan 1.1, an application+-- /can/ use different versions of Vulkan with an instance than it does+-- with a device or physical device.+--+-- Note+--+-- The Khronos validation layers will treat @apiVersion@ as the highest API+-- version the application targets, and will validate API usage against the+-- minimum of that version and the implementation version (instance or+-- device, depending on context). If an application tries to use+-- functionality from a greater version than this, a validation error will+-- be triggered.+--+-- For example, if the instance supports Vulkan 1.1 and three physical+-- devices support Vulkan 1.0, Vulkan 1.1, and Vulkan 1.2, respectively,+-- and if the application sets @apiVersion@ to 1.2, the application /can/+-- use the following versions of Vulkan:+--+-- -   Vulkan 1.0 /can/ be used with the instance and with all physical+--     devices.+--+-- -   Vulkan 1.1 /can/ be used with the instance and with the physical+--     devices that support Vulkan 1.1 and Vulkan 1.2.+--+-- -   Vulkan 1.2 /can/ be used with the physical device that supports+--     Vulkan 1.2.+--+-- If we modify the above example so that the application sets @apiVersion@+-- to 1.1, then the application /must/ not use Vulkan 1.2 functionality on+-- the physical device that supports Vulkan 1.2.+--+-- Implicit layers /must/ be disabled if they do not support a version at+-- least as high as @apiVersion@. See the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#LoaderAndLayerInterface Vulkan Loader Specification and Architecture Overview>+-- document for additional information.+--+-- Note+--+-- Providing a @NULL@ 'InstanceCreateInfo'::@pApplicationInfo@ or providing+-- an @apiVersion@ of 0 is equivalent to providing an @apiVersion@ of+-- @VK_MAKE_VERSION(1,0,0)@.+--+-- == Valid Usage+--+-- -   #VUID-VkApplicationInfo-apiVersion-04010# If @apiVersion@ is not+--     @0@, then it /must/ be greater or equal to+--     'Vulkan.Core10.API_VERSION_1_0'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkApplicationInfo-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_APPLICATION_INFO'+--+-- -   #VUID-VkApplicationInfo-pNext-pNext# @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkApplicationInfo-pApplicationName-parameter# If+--     @pApplicationName@ is not @NULL@, @pApplicationName@ /must/ be a+--     null-terminated UTF-8 string+--+-- -   #VUID-VkApplicationInfo-pEngineName-parameter# If @pEngineName@ is+--     not @NULL@, @pEngineName@ /must/ be a null-terminated UTF-8 string+--+-- = See Also+--+-- 'InstanceCreateInfo', 'Vulkan.Core10.Enums.StructureType.StructureType'+data ApplicationInfo = ApplicationInfo+  { -- | @pApplicationName@ is @NULL@ or is a pointer to a null-terminated UTF-8+    -- string containing the name of the application.+    applicationName :: Maybe ByteString+  , -- | @applicationVersion@ is an unsigned integer variable containing the+    -- developer-supplied version number of the application.+    applicationVersion :: 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.+    engineName :: Maybe ByteString+  , -- | @engineVersion@ is an unsigned integer variable containing the+    -- developer-supplied version number of the engine used to create the+    -- application.+    engineVersion :: Word32+  , -- | @apiVersion@ /must/ be the highest version of Vulkan that the+    -- application is designed to use, encoded as described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-coreversions-versionnumbers>.+    -- 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@.+    apiVersion :: Word32+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ApplicationInfo)+#endif+deriving instance Show ApplicationInfo++instance ToCStruct ApplicationInfo where+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ApplicationInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_APPLICATION_INFO)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    pApplicationName'' <- case (applicationName) of+      Nothing -> pure nullPtr+      Just j -> ContT $ useAsCString (j)+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pApplicationName''+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (applicationVersion)+    pEngineName'' <- case (engineName) of+      Nothing -> pure nullPtr+      Just j -> ContT $ useAsCString (j)+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pEngineName''+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (engineVersion)+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) (apiVersion)+    lift $ f+  cStructSize = 48+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_APPLICATION_INFO)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)+    f++instance FromCStruct ApplicationInfo where+  peekCStruct p = do+    pApplicationName <- peek @(Ptr CChar) ((p `plusPtr` 16 :: Ptr (Ptr CChar)))+    pApplicationName' <- maybePeek (\j -> packCString  (j)) pApplicationName+    applicationVersion <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))+    pEngineName <- peek @(Ptr CChar) ((p `plusPtr` 32 :: Ptr (Ptr CChar)))+    pEngineName' <- maybePeek (\j -> packCString  (j)) pEngineName+    engineVersion <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))+    apiVersion <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))+    pure $ ApplicationInfo+             pApplicationName' applicationVersion pEngineName' engineVersion apiVersion++instance Zero ApplicationInfo where+  zero = ApplicationInfo+           Nothing+           zero+           Nothing+           zero+           zero+++-- | VkInstanceCreateInfo - Structure specifying parameters of a newly+-- created instance+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkInstanceCreateInfo-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INSTANCE_CREATE_INFO'+--+-- -   #VUID-VkInstanceCreateInfo-pNext-pNext# 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+--     'Vulkan.Extensions.VK_EXT_debug_report.DebugReportCallbackCreateInfoEXT',+--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT',+--     'Vulkan.Extensions.VK_EXT_validation_features.ValidationFeaturesEXT',+--     or 'Vulkan.Extensions.VK_EXT_validation_flags.ValidationFlagsEXT'+--+-- -   #VUID-VkInstanceCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique, with the exception of+--     structures of type+--     'Vulkan.Extensions.VK_EXT_debug_utils.DebugUtilsMessengerCreateInfoEXT'+--+-- -   #VUID-VkInstanceCreateInfo-flags-zerobitmask# @flags@ /must/ be @0@+--+-- -   #VUID-VkInstanceCreateInfo-pApplicationInfo-parameter# If+--     @pApplicationInfo@ is not @NULL@, @pApplicationInfo@ /must/ be a+--     valid pointer to a valid 'ApplicationInfo' structure+--+-- -   #VUID-VkInstanceCreateInfo-ppEnabledLayerNames-parameter# If+--     @enabledLayerCount@ is not @0@, @ppEnabledLayerNames@ /must/ be a+--     valid pointer to an array of @enabledLayerCount@ null-terminated+--     UTF-8 strings+--+-- -   #VUID-VkInstanceCreateInfo-ppEnabledExtensionNames-parameter# If+--     @enabledExtensionCount@ is not @0@, @ppEnabledExtensionNames@ /must/+--     be a valid pointer to an array of @enabledExtensionCount@+--     null-terminated UTF-8 strings+--+-- = See Also+--+-- 'ApplicationInfo',+-- 'Vulkan.Core10.Enums.InstanceCreateFlags.InstanceCreateFlags',+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createInstance'+data InstanceCreateInfo (es :: [Type]) = InstanceCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is reserved for future use.+    flags :: InstanceCreateFlags+  , -- | @pApplicationInfo@ is @NULL@ or a pointer to a 'ApplicationInfo'+    -- structure. If not @NULL@, this information helps implementations+    -- recognize behavior inherent to classes of applications.+    -- 'ApplicationInfo' is defined in detail below.+    applicationInfo :: Maybe ApplicationInfo+  , -- | @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. The layers are loaded in the order they are+    -- listed in this array, with the first array element being the closest to+    -- the application, and the last array element being the closest to the+    -- driver. See the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers>+    -- section for further details.+    enabledLayerNames :: Vector ByteString+  , -- | @ppEnabledExtensionNames@ is a pointer to an array of+    -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the+    -- names of extensions to enable.+    enabledExtensionNames :: Vector ByteString+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (InstanceCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (InstanceCreateInfo es)++instance Extensible InstanceCreateInfo where+  extensibleType = STRUCTURE_TYPE_INSTANCE_CREATE_INFO+  setNext x next = x{next = next}+  getNext InstanceCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends InstanceCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @DebugUtilsMessengerCreateInfoEXT = Just f+    | Just Refl <- eqT @e @ValidationFeaturesEXT = Just f+    | Just Refl <- eqT @e @ValidationFlagsEXT = Just f+    | Just Refl <- eqT @e @DebugReportCallbackCreateInfoEXT = Just f+    | otherwise = Nothing++instance (Extendss InstanceCreateInfo es, PokeChain es) => ToCStruct (InstanceCreateInfo es) where+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p InstanceCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INSTANCE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr InstanceCreateFlags)) (flags)+    pApplicationInfo'' <- case (applicationInfo) of+      Nothing -> pure nullPtr+      Just j -> ContT $ withCStruct (j)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ApplicationInfo))) pApplicationInfo''+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledLayerNames)) :: Word32))+    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledLayerNames)) * 8) 8+    Data.Vector.imapM_ (\i e -> do+      ppEnabledLayerNames'' <- ContT $ useAsCString (e)+      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (enabledLayerNames)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledExtensionNames)) :: Word32))+    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (enabledExtensionNames)) * 8) 8+    Data.Vector.imapM_ (\i e -> do+      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)+      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (enabledExtensionNames)+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')+    lift $ f+  cStructSize = 64+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_INSTANCE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    pPpEnabledLayerNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8+    Data.Vector.imapM_ (\i e -> do+      ppEnabledLayerNames'' <- ContT $ useAsCString (e)+      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (mempty)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')+    pPpEnabledExtensionNames' <- ContT $ allocaBytesAligned @(Ptr CChar) ((Data.Vector.length (mempty)) * 8) 8+    Data.Vector.imapM_ (\i e -> do+      ppEnabledExtensionNames'' <- ContT $ useAsCString (e)+      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (mempty)+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')+    lift $ f++instance (Extendss InstanceCreateInfo es, PeekChain es) => FromCStruct (InstanceCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @InstanceCreateFlags ((p `plusPtr` 16 :: Ptr InstanceCreateFlags))+    pApplicationInfo <- peek @(Ptr ApplicationInfo) ((p `plusPtr` 24 :: Ptr (Ptr ApplicationInfo)))+    pApplicationInfo' <- maybePeek (\j -> peekCStruct @ApplicationInfo (j)) pApplicationInfo+    enabledLayerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))+    ppEnabledLayerNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar))))+    ppEnabledLayerNames' <- generateM (fromIntegral enabledLayerCount) (\i -> packCString =<< peek ((ppEnabledLayerNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))+    enabledExtensionCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))+    ppEnabledExtensionNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar))))+    ppEnabledExtensionNames' <- generateM (fromIntegral enabledExtensionCount) (\i -> packCString =<< peek ((ppEnabledExtensionNames `advancePtrBytes` (8 * (i)) :: Ptr (Ptr CChar))))+    pure $ InstanceCreateInfo+             next flags pApplicationInfo' ppEnabledLayerNames' ppEnabledExtensionNames'++instance es ~ '[] => Zero (InstanceCreateInfo es) where+  zero = InstanceCreateInfo+           ()+           zero+           Nothing+           mempty+           mempty+++-- | 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+--         'Vulkan.Core10.FundamentalTypes.Offset3D' parameter /must/+--         always be zero.+--+--     -   The @width@, @height@, and @depth@ members of a+--         'Vulkan.Core10.FundamentalTypes.Extent3D' 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 'Vulkan.Core10.FundamentalTypes.Offset3D'+--         parameter /must/ be integer multiples of Ax, Ay, and Az,+--         respectively.+--+--     -   @width@ of a 'Vulkan.Core10.FundamentalTypes.Extent3D' 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 'Vulkan.Core10.FundamentalTypes.Extent3D'+--         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 'Vulkan.Core10.FundamentalTypes.Extent3D' 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+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device Device Memory>+-- section describes memory properties queried from the physical device.+--+-- For physical device feature queries see the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features Features>+-- chapter.+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Extent3D',+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.QueueFamilyProperties2',+-- 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlags',+-- 'getPhysicalDeviceQueueFamilyProperties'+data QueueFamilyProperties = QueueFamilyProperties+  { -- | @queueFlags@ is a bitmask of+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlagBits' indicating+    -- capabilities of the queues in this queue family.+    queueFlags :: QueueFlags+  , -- | @queueCount@ is the unsigned integer count of queues in this queue+    -- family. Each queue family /must/ support at least one queue.+    queueCount :: Word32+  , -- | @timestampValidBits@ is the unsigned integer count of meaningful bits in+    -- the timestamps written via+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdWriteTimestamp'. 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.+    timestampValidBits :: Word32+  , -- | @minImageTransferGranularity@ is the minimum granularity supported for+    -- image transfer operations on the queues in this queue family.+    minImageTransferGranularity :: Extent3D+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (QueueFamilyProperties)+#endif+deriving instance Show QueueFamilyProperties++instance ToCStruct QueueFamilyProperties where+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p QueueFamilyProperties{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr QueueFlags)) (queueFlags)+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (queueCount)+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (timestampValidBits)+    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Extent3D)) (minImageTransferGranularity) . ($ ())+    lift $ f+  cStructSize = 24+  cStructAlignment = 4+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 12 :: Ptr Extent3D)) (zero) . ($ ())+    lift $ f++instance FromCStruct QueueFamilyProperties where+  peekCStruct p = do+    queueFlags <- peek @QueueFlags ((p `plusPtr` 0 :: Ptr QueueFlags))+    queueCount <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    timestampValidBits <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))+    minImageTransferGranularity <- peekCStruct @Extent3D ((p `plusPtr` 12 :: Ptr Extent3D))+    pure $ QueueFamilyProperties+             queueFlags queueCount timestampValidBits minImageTransferGranularity++instance Zero QueueFamilyProperties where+  zero = QueueFamilyProperties+           zero+           zero+           zero+           zero+++-- | VkPhysicalDeviceMemoryProperties - Structure specifying physical device+-- memory properties+--+-- = Description+--+-- The 'PhysicalDeviceMemoryProperties' 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 'Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS'. Each+-- heap is described by an element of the @memoryHeaps@ array as a+-- 'MemoryHeap' structure. The number of memory types available across all+-- memory heaps is given by @memoryTypeCount@ and is less than or equal to+-- 'Vulkan.Core10.APIConstants.MAX_MEMORY_TYPES'. Each memory type is+-- described by an element of the @memoryTypes@ array as a 'MemoryType'+-- structure.+--+-- At least one heap /must/ include+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_DEVICE_LOCAL_BIT' in+-- 'MemoryHeap'::@flags@. If there are multiple heaps that all have similar+-- performance characteristics, they /may/ all include+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.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 'getPhysicalDeviceMemoryProperties' /must/+-- have its @propertyFlags@ set to one of the following values:+--+-- -   0+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'+--+-- -   'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_CACHED_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--     |+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'+--+-- There /must/ be at least one memory type with both the+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+-- and+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT'+-- bits set in its @propertyFlags@. There /must/ be at least one memory+-- type with the+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+-- bit set in its @propertyFlags@. If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceCoherentMemory deviceCoherentMemory>+-- feature is enabled, there /must/ be at least one memory type with the+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+-- 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:+--+-- -   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) ; or+--+-- -   the @propertyFlags@ members of __Y__ includes+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD'+--     or+--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD'+--     and __X__ does not+--+-- 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+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-bitmask-list list of all allowed memory property flag combinations>+-- is written in a valid order. But if instead+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_LOCAL_BIT'+-- was before+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT'+-- |+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_COHERENT_BIT',+-- the list would still be in a valid order.+--+-- There may be a performance penalty for using device coherent or uncached+-- device memory types, and using these accidentally is undesirable. In+-- order to avoid this, memory types with these properties always appear at+-- the end of the list; but are subject to the same rules otherwise.+--+-- 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+--+-- 'MemoryHeap', 'MemoryType',+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceMemoryProperties2',+-- 'getPhysicalDeviceMemoryProperties'+data PhysicalDeviceMemoryProperties = PhysicalDeviceMemoryProperties+  { -- | @memoryTypeCount@ is the number of valid elements in the @memoryTypes@+    -- array.+    memoryTypeCount :: Word32+  , -- | @memoryTypes@ is an array of+    -- 'Vulkan.Core10.APIConstants.MAX_MEMORY_TYPES' 'MemoryType' structures+    -- describing the /memory types/ that /can/ be used to access memory+    -- allocated from the heaps specified by @memoryHeaps@.+    memoryTypes :: Vector MemoryType+  , -- | @memoryHeapCount@ is the number of valid elements in the @memoryHeaps@+    -- array.+    memoryHeapCount :: Word32+  , -- | @memoryHeaps@ is an array of+    -- 'Vulkan.Core10.APIConstants.MAX_MEMORY_HEAPS' 'MemoryHeap' structures+    -- describing the /memory heaps/ from which memory /can/ be allocated.+    memoryHeaps :: Vector MemoryHeap+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceMemoryProperties)+#endif+deriving instance Show PhysicalDeviceMemoryProperties++instance ToCStruct PhysicalDeviceMemoryProperties where+  withCStruct x f = allocaBytesAligned 520 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PhysicalDeviceMemoryProperties{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (memoryTypeCount)+    lift $ unless ((Data.Vector.length $ (memoryTypes)) <= MAX_MEMORY_TYPES) $+      throwIO $ IOError Nothing InvalidArgument "" "memoryTypes is too long, a maximum of MAX_MEMORY_TYPES elements are allowed" Nothing Nothing+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `plusPtr` (8 * (i)) :: Ptr MemoryType) (e) . ($ ())) (memoryTypes)+    lift $ poke ((p `plusPtr` 260 :: Ptr Word32)) (memoryHeapCount)+    lift $ unless ((Data.Vector.length $ (memoryHeaps)) <= MAX_MEMORY_HEAPS) $+      throwIO $ IOError Nothing InvalidArgument "" "memoryHeaps is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `plusPtr` (16 * (i)) :: Ptr MemoryHeap) (e) . ($ ())) (memoryHeaps)+    lift $ f+  cStructSize = 520+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)+    lift $ unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_TYPES) $+      throwIO $ IOError Nothing InvalidArgument "" "memoryTypes is too long, a maximum of MAX_MEMORY_TYPES elements are allowed" Nothing Nothing+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `plusPtr` (8 * (i)) :: Ptr MemoryType) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 260 :: Ptr Word32)) (zero)+    lift $ unless ((Data.Vector.length $ (mempty)) <= MAX_MEMORY_HEAPS) $+      throwIO $ IOError Nothing InvalidArgument "" "memoryHeaps is too long, a maximum of MAX_MEMORY_HEAPS elements are allowed" Nothing Nothing+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct ((lowerArrayPtr ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `plusPtr` (16 * (i)) :: Ptr MemoryHeap) (e) . ($ ())) (mempty)+    lift $ f++instance FromCStruct PhysicalDeviceMemoryProperties where+  peekCStruct p = do+    memoryTypeCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))+    memoryTypes <- generateM (MAX_MEMORY_TYPES) (\i -> peekCStruct @MemoryType (((lowerArrayPtr @MemoryType ((p `plusPtr` 4 :: Ptr (FixedArray MAX_MEMORY_TYPES MemoryType)))) `advancePtrBytes` (8 * (i)) :: Ptr MemoryType)))+    memoryHeapCount <- peek @Word32 ((p `plusPtr` 260 :: Ptr Word32))+    memoryHeaps <- generateM (MAX_MEMORY_HEAPS) (\i -> peekCStruct @MemoryHeap (((lowerArrayPtr @MemoryHeap ((p `plusPtr` 264 :: Ptr (FixedArray MAX_MEMORY_HEAPS MemoryHeap)))) `advancePtrBytes` (16 * (i)) :: Ptr MemoryHeap)))+    pure $ PhysicalDeviceMemoryProperties+             memoryTypeCount memoryTypes memoryHeapCount memoryHeaps++instance Zero PhysicalDeviceMemoryProperties where+  zero = PhysicalDeviceMemoryProperties+           zero+           mempty+           zero+           mempty+++-- | VkMemoryType - Structure specifying memory type+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlags',+-- 'PhysicalDeviceMemoryProperties'+data MemoryType = MemoryType+  { -- | @propertyFlags@ is a bitmask of+    -- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MemoryPropertyFlagBits' of+    -- properties for this memory type.+    propertyFlags :: MemoryPropertyFlags+  , -- | @heapIndex@ describes which memory heap this memory type corresponds to,+    -- and /must/ be less than @memoryHeapCount@ from the+    -- 'PhysicalDeviceMemoryProperties' structure.+    heapIndex :: Word32+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (MemoryType)+#endif+deriving instance Show MemoryType++instance ToCStruct MemoryType where+  withCStruct x f = allocaBytesAligned 8 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p MemoryType{..} f = do+    poke ((p `plusPtr` 0 :: Ptr MemoryPropertyFlags)) (propertyFlags)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (heapIndex)+    f+  cStructSize = 8+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    f++instance FromCStruct MemoryType where+  peekCStruct p = do+    propertyFlags <- peek @MemoryPropertyFlags ((p `plusPtr` 0 :: Ptr MemoryPropertyFlags))+    heapIndex <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    pure $ MemoryType+             propertyFlags heapIndex++instance Storable MemoryType where+  sizeOf ~_ = 8+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero MemoryType where+  zero = MemoryType+           zero+           zero+++-- | VkMemoryHeap - Structure specifying a memory heap+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MemoryHeapFlags',+-- 'PhysicalDeviceMemoryProperties'+data MemoryHeap = MemoryHeap+  { -- | @size@ is the total memory size in bytes in the heap.+    size :: DeviceSize+  , -- | @flags@ is a bitmask of+    -- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MemoryHeapFlagBits' specifying+    -- attribute flags for the heap.+    flags :: MemoryHeapFlags+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (MemoryHeap)+#endif+deriving instance Show MemoryHeap++instance ToCStruct MemoryHeap where+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p MemoryHeap{..} f = do+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (size)+    poke ((p `plusPtr` 8 :: Ptr MemoryHeapFlags)) (flags)+    f+  cStructSize = 16+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr DeviceSize)) (zero)+    f++instance FromCStruct MemoryHeap where+  peekCStruct p = do+    size <- peek @DeviceSize ((p `plusPtr` 0 :: Ptr DeviceSize))+    flags <- peek @MemoryHeapFlags ((p `plusPtr` 8 :: Ptr MemoryHeapFlags))+    pure $ MemoryHeap+             size flags++instance Storable MemoryHeap where+  sizeOf ~_ = 16+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero MemoryHeap where+  zero = MemoryHeap+           zero+           zero+++-- | 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-compressed format, then @bufferFeatures@ /must/+-- not support any features for the format.+--+-- If @format@ is not a multi-plane format then @linearTilingFeatures@ and+-- @optimalTilingFeatures@ /must/ not contain+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DISJOINT_BIT'.+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlags',+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.FormatProperties2',+-- 'getPhysicalDeviceFormatProperties'+data FormatProperties = FormatProperties+  { -- | @linearTilingFeatures@ is a bitmask of+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'+    -- specifying features supported by images created with a @tiling@+    -- parameter of 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'.+    linearTilingFeatures :: FormatFeatureFlags+  , -- | @optimalTilingFeatures@ is a bitmask of+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'+    -- specifying features supported by images created with a @tiling@+    -- parameter of 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL'.+    optimalTilingFeatures :: FormatFeatureFlags+  , -- | @bufferFeatures@ is a bitmask of+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits'+    -- specifying features supported by buffers.+    bufferFeatures :: FormatFeatureFlags+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (FormatProperties)+#endif+deriving instance Show FormatProperties++instance ToCStruct FormatProperties where+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p FormatProperties{..} f = do+    poke ((p `plusPtr` 0 :: Ptr FormatFeatureFlags)) (linearTilingFeatures)+    poke ((p `plusPtr` 4 :: Ptr FormatFeatureFlags)) (optimalTilingFeatures)+    poke ((p `plusPtr` 8 :: Ptr FormatFeatureFlags)) (bufferFeatures)+    f+  cStructSize = 12+  cStructAlignment = 4+  pokeZeroCStruct _ f = f++instance FromCStruct FormatProperties where+  peekCStruct p = do+    linearTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 0 :: Ptr FormatFeatureFlags))+    optimalTilingFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 4 :: Ptr FormatFeatureFlags))+    bufferFeatures <- peek @FormatFeatureFlags ((p `plusPtr` 8 :: Ptr FormatFeatureFlags))+    pure $ FormatProperties+             linearTilingFeatures optimalTilingFeatures bufferFeatures++instance Storable FormatProperties where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero FormatProperties where+  zero = FormatProperties+           zero+           zero+           zero+++-- | VkImageFormatProperties - Structure specifying an image format+-- properties+--+-- = Members+--+-- -   @maxExtent@ are the maximum image dimensions. See the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extentperimagetype Allowed Extent Values>+--     section below for how these values are constrained by @type@.+--+-- -   @maxMipLevels@ is the maximum number of mipmap levels.+--     @maxMipLevels@ /must/ be equal to the number of levels in the+--     complete mipmap chain based on the @maxExtent.width@,+--     @maxExtent.height@, and @maxExtent.depth@, except when one of the+--     following conditions is true, in which case it /may/ instead be @1@:+--+--     -   'getPhysicalDeviceImageFormatProperties'::@tiling@ was+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'+--+--     -   'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@tiling@+--         was+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'+--+--     -   the+--         'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'::@pNext@+--         chain included a+--         'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'+--         structure with a handle type included in the @handleTypes@+--         member for which mipmap image support is not required+--+--     -   image @format@ is one of those listed in+--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>+--+--     -   @flags@ contains+--         'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   @maxArrayLayers@ is the maximum number of array layers.+--     @maxArrayLayers@ /must/ be no less than+--     'PhysicalDeviceLimits'::@maxImageArrayLayers@, except when one of+--     the following conditions is true, in which case it /may/ instead be+--     @1@:+--+--     -   @tiling@ is+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'+--+--     -   @tiling@ is+--         'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL' and+--         @type@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'+--+--     -   @format@ is one of those listed in+--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>+--+-- -   If @tiling@ is+--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',+--     then @maxArrayLayers@ /must/ not be 0.+--+-- -   @sampleCounts@ is a bitmask of+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'+--     specifying all the supported sample counts for this image as+--     described+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supported-sample-counts below>.+--+-- -   @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 'Vulkan.Core10.Image.createImage' will return+-- 'Vulkan.Core10.Enums.Result.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+-- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'.+--+-- If the combination of parameters to+-- 'getPhysicalDeviceImageFormatProperties' is not supported by the+-- implementation for use in 'Vulkan.Core10.Image.createImage', then all+-- members of 'ImageFormatProperties' will be filled with zero.+--+-- Note+--+-- Filling 'ImageFormatProperties' 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+--+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.FundamentalTypes.Extent3D',+-- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalImageFormatPropertiesNV',+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2',+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags',+-- 'getPhysicalDeviceImageFormatProperties'+data ImageFormatProperties = ImageFormatProperties+  { -- No documentation found for Nested "VkImageFormatProperties" "maxExtent"+    maxExtent :: Extent3D+  , -- No documentation found for Nested "VkImageFormatProperties" "maxMipLevels"+    maxMipLevels :: Word32+  , -- No documentation found for Nested "VkImageFormatProperties" "maxArrayLayers"+    maxArrayLayers :: Word32+  , -- No documentation found for Nested "VkImageFormatProperties" "sampleCounts"+    sampleCounts :: SampleCountFlags+  , -- No documentation found for Nested "VkImageFormatProperties" "maxResourceSize"+    maxResourceSize :: DeviceSize+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ImageFormatProperties)+#endif+deriving instance Show ImageFormatProperties++instance ToCStruct ImageFormatProperties where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ImageFormatProperties{..} f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent3D)) (maxExtent) . ($ ())+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (maxMipLevels)+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (maxArrayLayers)+    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlags)) (sampleCounts)+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (maxResourceSize)+    lift $ f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr Extent3D)) (zero) . ($ ())+    lift $ poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)+    lift $ f++instance FromCStruct ImageFormatProperties where+  peekCStruct p = do+    maxExtent <- peekCStruct @Extent3D ((p `plusPtr` 0 :: Ptr Extent3D))+    maxMipLevels <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))+    maxArrayLayers <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))+    sampleCounts <- peek @SampleCountFlags ((p `plusPtr` 20 :: Ptr SampleCountFlags))+    maxResourceSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))+    pure $ ImageFormatProperties+             maxExtent maxMipLevels maxArrayLayers sampleCounts maxResourceSize++instance Zero ImageFormatProperties where+  zero = ImageFormatProperties+           zero+           zero+           zero+           zero+           zero+++-- | VkPhysicalDeviceFeatures - Structure describing the fine-grained+-- features that can be supported by an implementation+--+-- = Members+--+-- The members of the 'PhysicalDeviceFeatures' structure describe the+-- following features:+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Device.DeviceCreateInfo',+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',+-- 'getPhysicalDeviceFeatures'+data PhysicalDeviceFeatures = PhysicalDeviceFeatures+  { -- | #features-robustBufferAccess# @robustBufferAccess@ specifies that+    -- accesses to buffers are bounds-checked against the range of the buffer+    -- descriptor (as determined by+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo'::@range@,+    -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo'::@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. Buffer accesses through buffer device addresses are+    --         not bounds-checked. If the+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-cooperativeMatrixRobustBufferAccess cooperativeMatrixRobustBufferAccess>+    --         feature is not enabled, then accesses using+    --         @OpCooperativeMatrixLoadNV@ and @OpCooperativeMatrixStoreNV@+    --         /may/ not be bounds-checked.+    --+    --         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+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --         is not enabled and any buffer access is determined to be out of+    --         bounds, then any other access of the same type (load, store, or+    --         atomic) to the same buffer that accesses an address less than 16+    --         bytes away from the out of bounds address /may/ also be+    --         considered out of bounds.+    --+    --     -   If the access is a load that reads from the same memory+    --         locations as a prior store in the same shader invocation, with+    --         no other intervening accesses to the same memory locations in+    --         that shader invocation, then the result of the load /may/ be the+    --         value stored by the store instruction, even if the access is out+    --         of bounds. If the load is @Volatile@, then an out of bounds load+    --         /must/ return the appropriate out of bounds value.+    --+    -- -   Accesses to descriptors written with a+    --     'Vulkan.Core10.APIConstants.NULL_HANDLE' resource or view are not+    --     considered to be out of bounds. Instead, each type of descriptor+    --     access defines a specific behavior for accesses to a null+    --     descriptor.+    --+    -- -   Out-of-bounds buffer loads will return any of the following values:+    --+    --     -   If the access is to a uniform buffer and+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --         is enabled, loads of offsets between the end of the descriptor+    --         range and the end of the descriptor range rounded up to a+    --         multiple of+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>+    --         bytes /must/ return either zero values or the contents of the+    --         memory at the offset being loaded. Loads of offsets past the+    --         descriptor range rounded up to a multiple of+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>+    --         bytes /must/ return zero values.+    --+    --     -   If the access is to a storage buffer and+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --         is enabled, loads of offsets between the end of the descriptor+    --         range and the end of the descriptor range rounded up to a+    --         multiple of+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>+    --         bytes /must/ return either zero values or the contents of the+    --         memory at the offset being loaded. Loads of offsets past the+    --         descriptor range rounded up to a multiple of+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>+    --         bytes /must/ return zero values. Similarly, stores to addresses+    --         between the end of the descriptor range and the end of the+    --         descriptor range rounded up to a multiple of+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustStorageBufferAccessSizeAlignment robustStorageBufferAccessSizeAlignment>+    --         bytes /may/ be discarded.+    --+    --     -   Non-atomic accesses to storage buffers that are a multiple of 32+    --         bits /may/ be decomposed into 32-bit accesses that are+    --         individually bounds-checked.+    --+    --     -   If the access is to an index buffer and+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --         is enabled, zero values /must/ be returned.+    --+    --     -   If the access is to a uniform texel buffer or storage texel+    --         buffer and+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --         is enabled, zero values /must/ be returned, and then+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba Conversion to RGBA>+    --         is applied based on the buffer view’s format.+    --+    --     -   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.+    --+    --     -   If+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --         is enabled, out of bounds writes /must/ not modify any 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.+    --+    --     -   If+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --         is enabled, out of bounds atomics /must/ not modify any memory,+    --         and return an undefined value.+    --+    -- -   If+    --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --     is disabled, 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+    --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>+    --     is enabled, 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 the byte size of the+    --     memory range bound to the vertex buffer binding.+    --+    --     -   If a vertex input attribute is out of bounds, the+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction raw data>+    --         extracted are zero values, and missing G, B, or A components are+    --         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input-extraction filled with (0,0,1)>.+    --+    -- -   If @robustBufferAccess@ is not enabled, applications /must/ not+    --     perform out of bounds accesses.+    robustBufferAccess :: Bool+  , -- | #features-fullDrawIndexUint32# @fullDrawIndexUint32@ specifies the full+    -- 32-bit range of indices is supported for indexed draw calls when using a+    -- 'Vulkan.Core10.Enums.IndexType.IndexType' of+    -- 'Vulkan.Core10.Enums.IndexType.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+    -- 'Vulkan.Core10.Enums.IndexType.IndexType' is+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32'). If this feature is+    -- supported, @maxDrawIndexedIndexValue@ /must/ be 232-1; otherwise it+    -- /must/ be no smaller than 224-1. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDrawIndexedIndexValue maxDrawIndexedIndexValue>.+    fullDrawIndexUint32 :: Bool+  , -- | #features-imageCubeArray# @imageCubeArray@ specifies whether image views+    -- with a 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' of+    -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' /can/ be+    -- created, and that the corresponding @SampledCubeArray@ and+    -- @ImageCubeArray@ SPIR-V capabilities /can/ be used in shader code.+    imageCubeArray :: Bool+  , -- | #features-independentBlend# @independentBlend@ specifies whether the+    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' settings are+    -- controlled independently per-attachment. If this feature is not enabled,+    -- the 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' settings+    -- for all color attachments /must/ be identical. Otherwise, a different+    -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState' /can/ be+    -- provided for each bound color attachment.+    independentBlend :: Bool+  , -- | #features-geometryShader# @geometryShader@ specifies whether geometry+    -- shaders are supported. If this feature is not enabled, the+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT' and+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT'+    -- enum values /must/ not be used. This also specifies whether shader+    -- modules /can/ declare the @Geometry@ capability.+    geometryShader :: Bool+  , -- | #features-tessellationShader# @tessellationShader@ specifies whether+    -- tessellation control and evaluation shaders are supported. If this+    -- feature is not enabled, the+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT',+    -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT',+    -- and+    -- 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'+    -- enum values /must/ not be used. This also specifies whether shader+    -- modules /can/ declare the @Tessellation@ capability.+    tessellationShader :: Bool+  , -- | #features-sampleRateShading# @sampleRateShading@ specifies whether+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>+    -- and multisample interpolation are supported. If this feature is not+    -- enabled, the @sampleShadingEnable@ member of the+    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo' structure+    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE' and the+    -- @minSampleShading@ member is ignored. This also specifies whether shader+    -- modules /can/ declare the @SampleRateShading@ capability.+    sampleRateShading :: Bool+  , -- | #features-dualSrcBlend# @dualSrcBlend@ specifies whether blend+    -- operations which take two sources are supported. If this feature is not+    -- enabled, the 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',+    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',+    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', and+    -- 'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA' enum+    -- values /must/ not be used as source or destination blending factors. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb>.+    dualSrcBlend :: Bool+  , -- | #features-logicOp# @logicOp@ specifies whether logic operations are+    -- supported. If this feature is not enabled, the @logicOpEnable@ member of+    -- the 'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo' structure+    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE', and the+    -- @logicOp@ member is ignored.+    logicOp :: Bool+  , -- | #features-multiDrawIndirect# @multiDrawIndirect@ specifies whether+    -- multiple draw indirect is supported. If this feature is not enabled, the+    -- @drawCount@ parameter to the+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' and+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect' commands+    -- /must/ be 0 or 1. The @maxDrawIndirectCount@ member of the+    -- 'PhysicalDeviceLimits' structure /must/ also be 1 if this feature is not+    -- supported. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDrawIndirectCount maxDrawIndirectCount>.+    multiDrawIndirect :: Bool+  , -- | #features-drawIndirectFirstInstance# @drawIndirectFirstInstance@+    -- specifies whether indirect draw calls support the @firstInstance@+    -- parameter. If this feature is not enabled, the @firstInstance@ member of+    -- all 'Vulkan.Core10.OtherTypes.DrawIndirectCommand' and+    -- 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand' structures that+    -- are provided to the+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' and+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect' commands+    -- /must/ be 0.+    drawIndirectFirstInstance :: Bool+  , -- | #features-depthClamp# @depthClamp@ specifies whether depth clamping is+    -- supported. If this feature is not enabled, the @depthClampEnable@ member+    -- of the 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'+    -- structure /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE'.+    -- Otherwise, setting @depthClampEnable@ to+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' will enable depth clamping.+    depthClamp :: Bool+  , -- | #features-depthBiasClamp# @depthBiasClamp@ specifies whether depth bias+    -- clamping is supported. If this feature is not enabled, the+    -- @depthBiasClamp@ member of the+    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' structure+    -- /must/ be set to 0.0 unless the+    -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS' dynamic+    -- state is enabled, and the @depthBiasClamp@ parameter to+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBias' /must/ be set to+    -- 0.0.+    depthBiasClamp :: Bool+  , -- | #features-fillModeNonSolid# @fillModeNonSolid@ specifies whether point+    -- and wireframe fill modes are supported. If this feature is not enabled,+    -- the 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT' and+    -- 'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_LINE' enum values /must/+    -- not be used.+    fillModeNonSolid :: Bool+  , -- | #features-depthBounds# @depthBounds@ specifies whether depth bounds+    -- tests are supported. If this feature is not enabled, the+    -- @depthBoundsTestEnable@ member of the+    -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' structure+    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE'. When+    -- @depthBoundsTestEnable@ is set to+    -- 'Vulkan.Core10.FundamentalTypes.FALSE', the @minDepthBounds@ and+    -- @maxDepthBounds@ members of the+    -- 'Vulkan.Core10.Pipeline.PipelineDepthStencilStateCreateInfo' structure+    -- are ignored.+    depthBounds :: Bool+  , -- | #features-wideLines# @wideLines@ specifies whether lines with width+    -- other than 1.0 are supported. If this feature is not enabled, the+    -- @lineWidth@ member of the+    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' structure+    -- /must/ be set to 1.0 unless the+    -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH' dynamic+    -- state is enabled, and the @lineWidth@ parameter to+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' /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 'PhysicalDeviceLimits' structure,+    -- respectively.+    wideLines :: Bool+  , -- | #features-largePoints# @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+    -- 'PhysicalDeviceLimits' structure, respectively.+    largePoints :: Bool+  , -- | #features-alphaToOne# @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+    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo' structure+    -- /must/ be set to 'Vulkan.Core10.FundamentalTypes.FALSE'. Otherwise+    -- setting @alphaToOneEnable@ to 'Vulkan.Core10.FundamentalTypes.TRUE' will+    -- enable alpha-to-one behavior.+    alphaToOne :: Bool+  , -- | #features-multiViewport# @multiViewport@ specifies whether more than one+    -- viewport is supported. If this feature is not enabled:+    --+    -- -   The @viewportCount@ and @scissorCount@ members of the+    --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' structure+    --     /must/ be set to 1.+    --+    -- -   The @firstViewport@ and @viewportCount@ parameters to the+    --     'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport' command /must/+    --     be set to 0 and 1, respectively.+    --+    -- -   The @firstScissor@ and @scissorCount@ parameters to the+    --     'Vulkan.Core10.CommandBufferBuilding.cmdSetScissor' command /must/+    --     be set to 0 and 1, respectively.+    --+    -- -   The @exclusiveScissorCount@ member of the+    --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+    --     structure /must/ be set to 0 or 1.+    --+    -- -   The @firstExclusiveScissor@ and @exclusiveScissorCount@ parameters+    --     to the+    --     'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV'+    --     command /must/ be set to 0 and 1, respectively.+    multiViewport :: Bool+  , -- | #features-samplerAnisotropy# @samplerAnisotropy@ specifies whether+    -- anisotropic filtering is supported. If this feature is not enabled, the+    -- @anisotropyEnable@ member of the+    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' structure /must/ be+    -- 'Vulkan.Core10.FundamentalTypes.FALSE'.+    samplerAnisotropy :: Bool+  , -- | #features-textureCompressionETC2# @textureCompressionETC2@ specifies+    -- whether all of the ETC2 and EAC compressed texture formats are+    -- supported. If this feature is enabled, then the+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'+    -- and+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+    -- features /must/ be supported in @optimalTilingFeatures@ for the+    -- following formats:+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11_SNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11G11_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_EAC_R11G11_SNORM_BLOCK'+    --+    -- To query for additional properties, or if the feature is not enabled,+    -- 'getPhysicalDeviceFormatProperties' and+    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for+    -- supported properties of individual formats as normal.+    textureCompressionETC2 :: Bool+  , -- | #features-textureCompressionASTC_LDR# @textureCompressionASTC_LDR@+    -- specifies whether all of the ASTC LDR compressed texture formats are+    -- supported. If this feature is enabled, then the+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'+    -- and+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+    -- features /must/ be supported in @optimalTilingFeatures@ for the+    -- following formats:+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_4x4_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x4_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_5x5_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x5_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_6x6_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x5_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x6_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_8x8_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x5_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x6_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x8_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_10x10_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x10_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_ASTC_12x12_SRGB_BLOCK'+    --+    -- To query for additional properties, or if the feature is not enabled,+    -- 'getPhysicalDeviceFormatProperties' and+    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for+    -- supported properties of individual formats as normal.+    textureCompressionASTC_LDR :: Bool+  , -- | #features-textureCompressionBC# @textureCompressionBC@ specifies whether+    -- all of the BC compressed texture formats are supported. If this feature+    -- is enabled, then the+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'+    -- and+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+    -- features /must/ be supported in @optimalTilingFeatures@ for the+    -- following formats:+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGB_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGB_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGBA_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC1_RGBA_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC2_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC2_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC3_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC3_SRGB_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC4_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC4_SNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC5_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC5_SNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC6H_UFLOAT_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC6H_SFLOAT_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC7_UNORM_BLOCK'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_BC7_SRGB_BLOCK'+    --+    -- To query for additional properties, or if the feature is not enabled,+    -- 'getPhysicalDeviceFormatProperties' and+    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for+    -- supported properties of individual formats as normal.+    textureCompressionBC :: Bool+  , -- | #features-occlusionQueryPrecise# @occlusionQueryPrecise@ specifies+    -- whether occlusion queries returning actual sample counts are supported.+    -- Occlusion queries are created in a 'Vulkan.Core10.Handles.QueryPool' by+    -- specifying the @queryType@ of+    -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION' in the+    -- 'Vulkan.Core10.Query.QueryPoolCreateInfo' structure which is passed to+    -- 'Vulkan.Core10.Query.createQueryPool'. If this feature is enabled,+    -- queries of this type /can/ enable+    -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT' in+    -- the @flags@ parameter to+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery'. 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+    -- 'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT' is+    -- set, occlusion queries will report the actual number of samples passed.+    occlusionQueryPrecise :: Bool+  , -- | #features-pipelineStatisticsQuery# @pipelineStatisticsQuery@ specifies+    -- whether the pipeline statistics queries are supported. If this feature+    -- is not enabled, queries of type+    -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' /cannot/+    -- be created, and none of the+    -- 'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits'+    -- bits /can/ be set in the @pipelineStatistics@ member of the+    -- 'Vulkan.Core10.Query.QueryPoolCreateInfo' structure.+    pipelineStatisticsQuery :: Bool+  , -- | #features-vertexPipelineStoresAndAtomics#+    -- @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 @NonWritable@+    -- decoration (or the @readonly@ memory qualifier in GLSL).+    vertexPipelineStoresAndAtomics :: Bool+  , -- | #features-fragmentStoresAndAtomics# @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+    -- @NonWritable@ decoration (or the @readonly@ memory qualifier in GLSL).+    fragmentStoresAndAtomics :: Bool+  , -- | #features-shaderTessellationAndGeometryPointSize#+    -- @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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellationShader>+    -- or+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometryShader>+    -- features.+    shaderTessellationAndGeometryPointSize :: Bool+  , -- | #features-shaderImageGatherExtended# @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.+    shaderImageGatherExtended :: Bool+  , -- | #features-shaderStorageImageExtendedFormats#+    -- @shaderStorageImageExtendedFormats@ specifies whether all the “storage+    -- image extended formats” below are supported; if this feature is+    -- supported, then the+    -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_BIT'+    -- /must/ be supported in @optimalTilingFeatures@ for the following+    -- formats:+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFLOAT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_B10G11R11_UFLOAT_PACK32'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SFLOAT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_UNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_A2B10G10R10_UNORM_PACK32'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_UNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_UNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_UNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_SNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_SNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_SNORM'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SINT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_SINT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_SINT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_SINT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_A2B10G10R10_UINT_PACK32'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_UINT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UINT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R16_UINT'+    --+    -- -   'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'+    --+    -- Note+    --+    -- @shaderStorageImageExtendedFormats@ feature only adds a guarantee of+    -- format support, which is specified for the whole physical device.+    -- Therefore enabling or disabling the feature via+    -- 'Vulkan.Core10.Device.createDevice' has no practical effect.+    --+    -- To query for additional properties, or if the feature is not supported,+    -- 'getPhysicalDeviceFormatProperties' and+    -- 'getPhysicalDeviceImageFormatProperties' /can/ be used to check for+    -- supported properties of individual formats, as usual rules allow.+    --+    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_UINT',+    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_SINT', and+    -- 'Vulkan.Core10.Enums.Format.FORMAT_R32G32_SFLOAT' from+    -- @StorageImageExtendedFormats@ SPIR-V capability, are already covered by+    -- core Vulkan+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-mandatory-features-32bit mandatory format support>.+    shaderStorageImageExtendedFormats :: Bool+  , -- | #features-shaderStorageImageMultisample# @shaderStorageImageMultisample@+    -- specifies whether multisampled storage images are supported. If this+    -- feature is not enabled, images that are created with a @usage@ that+    -- includes+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT' /must/+    -- be created with @samples@ equal to+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'. This also+    -- specifies whether shader modules /can/ declare the+    -- @StorageImageMultisample@ and @ImageMSArray@ capabilities.+    shaderStorageImageMultisample :: Bool+  , -- | #features-shaderStorageImageReadWithoutFormat#+    -- @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.+    shaderStorageImageReadWithoutFormat :: Bool+  , -- | #features-shaderStorageImageWriteWithoutFormat#+    -- @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.+    shaderStorageImageWriteWithoutFormat :: Bool+  , -- | #features-shaderUniformBufferArrayDynamicIndexing#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.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.+    shaderUniformBufferArrayDynamicIndexing :: Bool+  , -- | #features-shaderSampledImageArrayDynamicIndexing#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',+    -- or 'Vulkan.Core10.Enums.DescriptorType.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.+    shaderSampledImageArrayDynamicIndexing :: Bool+  , -- | #features-shaderStorageBufferArrayDynamicIndexing#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.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.+    shaderStorageBufferArrayDynamicIndexing :: Bool+  , -- | #features-shaderStorageImageArrayDynamicIndexing#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.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.+    shaderStorageImageArrayDynamicIndexing :: Bool+  , -- | #features-shaderClipDistance# @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.+    shaderClipDistance :: Bool+  , -- | #features-shaderCullDistance# @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.+    shaderCullDistance :: Bool+  , -- | #features-shaderFloat64# @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.+    -- Declaring and using 64-bit floats is enabled for all storage classes+    -- that SPIR-V allows with the @Float64@ capability.+    shaderFloat64 :: Bool+  , -- | #features-shaderInt64# @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. Declaring and using 64-bit integers is enabled for all+    -- storage classes that SPIR-V allows with the @Int64@ capability.+    shaderInt64 :: Bool+  , -- | #features-shaderInt16# @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. However, this only enables a subset of the storage classes+    -- that SPIR-V allows for the @Int16@ SPIR-V capability: Declaring and+    -- using 16-bit integers in the @Private@, @Workgroup@, and @Function@+    -- storage classes is enabled, while declaring them in the interface+    -- storage classes (e.g., @UniformConstant@, @Uniform@, @StorageBuffer@,+    -- @Input@, @Output@, and @PushConstant@) is not enabled.+    shaderInt16 :: Bool+  , -- | #features-shaderResourceResidency# @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.+    shaderResourceResidency :: Bool+  , -- | #features-shaderResourceMinLod# @shaderResourceMinLod@ specifies whether+    -- image operations specifying 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.+    shaderResourceMinLod :: Bool+  , -- | #features-sparseBinding# @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+    -- 'Vulkan.Core10.MemoryManagement.bindBufferMemory' and+    -- 'Vulkan.Core10.MemoryManagement.bindImageMemory' commands. In this case,+    -- buffers and images /must/ not be created with+    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT'+    -- and+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT'+    -- set in the @flags@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'+    -- and 'Vulkan.Core10.Image.ImageCreateInfo' structures, respectively.+    -- Otherwise resource memory /can/ be managed as described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures Sparse Resource Features>.+    sparseBinding :: Bool+  , -- | #features-sparseResidencyBuffer# @sparseResidencyBuffer@ specifies+    -- whether the device /can/ access partially resident buffers. If this+    -- feature is not enabled, buffers /must/ not be created with+    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+    -- set in the @flags@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'+    -- structure.+    sparseResidencyBuffer :: Bool+  , -- | #features-sparseResidencyImage2D# @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 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and+    -- @samples@ set to+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' /must/ not+    -- be created with+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'+    -- structure.+    sparseResidencyImage2D :: Bool+  , -- | #features-sparseResidencyImage3D# @sparseResidencyImage3D@ specifies+    -- whether the device /can/ access partially resident 3D images. If this+    -- feature is not enabled, images with an @imageType@ of+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' /must/ not be created with+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'+    -- structure.+    sparseResidencyImage3D :: Bool+  , -- | #features-sparseResidency2Samples# @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 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and+    -- @samples@ set to+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_2_BIT' /must/ not+    -- be created with+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'+    -- structure.+    sparseResidency2Samples :: Bool+  , -- | #features-sparseResidency4Samples# @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 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and+    -- @samples@ set to+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_4_BIT' /must/ not+    -- be created with+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'+    -- structure.+    sparseResidency4Samples :: Bool+  , -- | #features-sparseResidency8Samples# @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 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and+    -- @samples@ set to+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_8_BIT' /must/ not+    -- be created with+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'+    -- structure.+    sparseResidency8Samples :: Bool+  , -- | #features-sparseResidency16Samples# @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 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and+    -- @samples@ set to+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_16_BIT' /must/ not+    -- be created with+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+    -- set in the @flags@ member of the 'Vulkan.Core10.Image.ImageCreateInfo'+    -- structure.+    sparseResidency16Samples :: Bool+  , -- | #features-sparseResidencyAliased# @sparseResidencyAliased@ specifies+    -- whether the physical device /can/ correctly access data aliased into+    -- multiple locations. If this feature is not enabled, the+    -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_ALIASED_BIT'+    -- and+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT'+    -- enum values /must/ not be used in @flags@ members of the+    -- 'Vulkan.Core10.Buffer.BufferCreateInfo' and+    -- 'Vulkan.Core10.Image.ImageCreateInfo' structures, respectively.+    sparseResidencyAliased :: Bool+  , -- | #features-variableMultisampleRate# @variableMultisampleRate@ specifies+    -- whether all pipelines that will be bound to a command buffer during a+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments subpass which uses no attachments>+    -- /must/ have the same value for+    -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@.+    -- If set to 'Vulkan.Core10.FundamentalTypes.TRUE', the implementation+    -- supports variable multisample rates in a subpass which uses no+    -- attachments. If set to 'Vulkan.Core10.FundamentalTypes.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.+    variableMultisampleRate :: Bool+  , -- | #features-inheritedQueries# @inheritedQueries@ specifies whether a+    -- secondary command buffer /may/ be executed while a query is active.+    inheritedQueries :: Bool+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceFeatures)+#endif+deriving instance Show PhysicalDeviceFeatures++instance ToCStruct PhysicalDeviceFeatures where+  withCStruct x f = allocaBytesAligned 220 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PhysicalDeviceFeatures{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (robustBufferAccess))+    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (fullDrawIndexUint32))+    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (imageCubeArray))+    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (independentBlend))+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (geometryShader))+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (tessellationShader))+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleRateShading))+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (dualSrcBlend))+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (logicOp))+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (multiDrawIndirect))+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (drawIndirectFirstInstance))+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (depthClamp))+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (depthBiasClamp))+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (fillModeNonSolid))+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (depthBounds))+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (wideLines))+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (largePoints))+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (alphaToOne))+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (multiViewport))+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (samplerAnisotropy))+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (textureCompressionETC2))+    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (textureCompressionASTC_LDR))+    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (textureCompressionBC))+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (occlusionQueryPrecise))+    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (pipelineStatisticsQuery))+    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (vertexPipelineStoresAndAtomics))+    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (fragmentStoresAndAtomics))+    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (shaderTessellationAndGeometryPointSize))+    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (shaderImageGatherExtended))+    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageExtendedFormats))+    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageMultisample))+    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageReadWithoutFormat))+    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageWriteWithoutFormat))+    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (shaderUniformBufferArrayDynamicIndexing))+    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (shaderSampledImageArrayDynamicIndexing))+    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (shaderStorageBufferArrayDynamicIndexing))+    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (shaderStorageImageArrayDynamicIndexing))+    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (shaderClipDistance))+    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (shaderCullDistance))+    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (shaderFloat64))+    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (shaderInt64))+    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (shaderInt16))+    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (shaderResourceResidency))+    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (shaderResourceMinLod))+    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (sparseBinding))+    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (sparseResidencyBuffer))+    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (sparseResidencyImage2D))+    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (sparseResidencyImage3D))+    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (sparseResidency2Samples))+    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (sparseResidency4Samples))+    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (sparseResidency8Samples))+    poke ((p `plusPtr` 204 :: Ptr Bool32)) (boolToBool32 (sparseResidency16Samples))+    poke ((p `plusPtr` 208 :: Ptr Bool32)) (boolToBool32 (sparseResidencyAliased))+    poke ((p `plusPtr` 212 :: Ptr Bool32)) (boolToBool32 (variableMultisampleRate))+    poke ((p `plusPtr` 216 :: Ptr Bool32)) (boolToBool32 (inheritedQueries))+    f+  cStructSize = 220+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 52 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 56 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 60 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 64 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 68 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 72 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 76 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 80 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 84 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 88 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 92 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 96 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 100 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 104 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 108 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 112 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 116 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 120 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 124 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 128 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 132 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 136 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 140 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 144 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 148 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 152 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 156 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 160 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 164 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 168 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 172 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 176 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 180 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 184 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 188 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 192 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 196 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 200 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 204 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 208 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 212 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 216 :: Ptr Bool32)) (boolToBool32 (zero))+    f++instance FromCStruct PhysicalDeviceFeatures where+  peekCStruct p = do+    robustBufferAccess <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))+    fullDrawIndexUint32 <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))+    imageCubeArray <- peek @Bool32 ((p `plusPtr` 8 :: Ptr Bool32))+    independentBlend <- peek @Bool32 ((p `plusPtr` 12 :: Ptr Bool32))+    geometryShader <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))+    tessellationShader <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))+    sampleRateShading <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))+    dualSrcBlend <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))+    logicOp <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))+    multiDrawIndirect <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))+    drawIndirectFirstInstance <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))+    depthClamp <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))+    depthBiasClamp <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))+    fillModeNonSolid <- peek @Bool32 ((p `plusPtr` 52 :: Ptr Bool32))+    depthBounds <- peek @Bool32 ((p `plusPtr` 56 :: Ptr Bool32))+    wideLines <- peek @Bool32 ((p `plusPtr` 60 :: Ptr Bool32))+    largePoints <- peek @Bool32 ((p `plusPtr` 64 :: Ptr Bool32))+    alphaToOne <- peek @Bool32 ((p `plusPtr` 68 :: Ptr Bool32))+    multiViewport <- peek @Bool32 ((p `plusPtr` 72 :: Ptr Bool32))+    samplerAnisotropy <- peek @Bool32 ((p `plusPtr` 76 :: Ptr Bool32))+    textureCompressionETC2 <- peek @Bool32 ((p `plusPtr` 80 :: Ptr Bool32))+    textureCompressionASTC_LDR <- peek @Bool32 ((p `plusPtr` 84 :: Ptr Bool32))+    textureCompressionBC <- peek @Bool32 ((p `plusPtr` 88 :: Ptr Bool32))+    occlusionQueryPrecise <- peek @Bool32 ((p `plusPtr` 92 :: Ptr Bool32))+    pipelineStatisticsQuery <- peek @Bool32 ((p `plusPtr` 96 :: Ptr Bool32))+    vertexPipelineStoresAndAtomics <- peek @Bool32 ((p `plusPtr` 100 :: Ptr Bool32))+    fragmentStoresAndAtomics <- peek @Bool32 ((p `plusPtr` 104 :: Ptr Bool32))+    shaderTessellationAndGeometryPointSize <- peek @Bool32 ((p `plusPtr` 108 :: Ptr Bool32))+    shaderImageGatherExtended <- peek @Bool32 ((p `plusPtr` 112 :: Ptr Bool32))+    shaderStorageImageExtendedFormats <- peek @Bool32 ((p `plusPtr` 116 :: Ptr Bool32))+    shaderStorageImageMultisample <- peek @Bool32 ((p `plusPtr` 120 :: Ptr Bool32))+    shaderStorageImageReadWithoutFormat <- peek @Bool32 ((p `plusPtr` 124 :: Ptr Bool32))+    shaderStorageImageWriteWithoutFormat <- peek @Bool32 ((p `plusPtr` 128 :: Ptr Bool32))+    shaderUniformBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 132 :: Ptr Bool32))+    shaderSampledImageArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 136 :: Ptr Bool32))+    shaderStorageBufferArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 140 :: Ptr Bool32))+    shaderStorageImageArrayDynamicIndexing <- peek @Bool32 ((p `plusPtr` 144 :: Ptr Bool32))+    shaderClipDistance <- peek @Bool32 ((p `plusPtr` 148 :: Ptr Bool32))+    shaderCullDistance <- peek @Bool32 ((p `plusPtr` 152 :: Ptr Bool32))+    shaderFloat64 <- peek @Bool32 ((p `plusPtr` 156 :: Ptr Bool32))+    shaderInt64 <- peek @Bool32 ((p `plusPtr` 160 :: Ptr Bool32))+    shaderInt16 <- peek @Bool32 ((p `plusPtr` 164 :: Ptr Bool32))+    shaderResourceResidency <- peek @Bool32 ((p `plusPtr` 168 :: Ptr Bool32))+    shaderResourceMinLod <- peek @Bool32 ((p `plusPtr` 172 :: Ptr Bool32))+    sparseBinding <- peek @Bool32 ((p `plusPtr` 176 :: Ptr Bool32))+    sparseResidencyBuffer <- peek @Bool32 ((p `plusPtr` 180 :: Ptr Bool32))+    sparseResidencyImage2D <- peek @Bool32 ((p `plusPtr` 184 :: Ptr Bool32))+    sparseResidencyImage3D <- peek @Bool32 ((p `plusPtr` 188 :: Ptr Bool32))+    sparseResidency2Samples <- peek @Bool32 ((p `plusPtr` 192 :: Ptr Bool32))+    sparseResidency4Samples <- peek @Bool32 ((p `plusPtr` 196 :: Ptr Bool32))+    sparseResidency8Samples <- peek @Bool32 ((p `plusPtr` 200 :: Ptr Bool32))+    sparseResidency16Samples <- peek @Bool32 ((p `plusPtr` 204 :: Ptr Bool32))+    sparseResidencyAliased <- peek @Bool32 ((p `plusPtr` 208 :: Ptr Bool32))+    variableMultisampleRate <- peek @Bool32 ((p `plusPtr` 212 :: Ptr Bool32))+    inheritedQueries <- peek @Bool32 ((p `plusPtr` 216 :: Ptr Bool32))+    pure $ PhysicalDeviceFeatures+             (bool32ToBool robustBufferAccess) (bool32ToBool fullDrawIndexUint32) (bool32ToBool imageCubeArray) (bool32ToBool independentBlend) (bool32ToBool geometryShader) (bool32ToBool tessellationShader) (bool32ToBool sampleRateShading) (bool32ToBool dualSrcBlend) (bool32ToBool logicOp) (bool32ToBool multiDrawIndirect) (bool32ToBool drawIndirectFirstInstance) (bool32ToBool depthClamp) (bool32ToBool depthBiasClamp) (bool32ToBool fillModeNonSolid) (bool32ToBool depthBounds) (bool32ToBool wideLines) (bool32ToBool largePoints) (bool32ToBool alphaToOne) (bool32ToBool multiViewport) (bool32ToBool samplerAnisotropy) (bool32ToBool textureCompressionETC2) (bool32ToBool textureCompressionASTC_LDR) (bool32ToBool textureCompressionBC) (bool32ToBool occlusionQueryPrecise) (bool32ToBool pipelineStatisticsQuery) (bool32ToBool vertexPipelineStoresAndAtomics) (bool32ToBool fragmentStoresAndAtomics) (bool32ToBool shaderTessellationAndGeometryPointSize) (bool32ToBool shaderImageGatherExtended) (bool32ToBool shaderStorageImageExtendedFormats) (bool32ToBool shaderStorageImageMultisample) (bool32ToBool shaderStorageImageReadWithoutFormat) (bool32ToBool shaderStorageImageWriteWithoutFormat) (bool32ToBool shaderUniformBufferArrayDynamicIndexing) (bool32ToBool shaderSampledImageArrayDynamicIndexing) (bool32ToBool shaderStorageBufferArrayDynamicIndexing) (bool32ToBool shaderStorageImageArrayDynamicIndexing) (bool32ToBool shaderClipDistance) (bool32ToBool shaderCullDistance) (bool32ToBool shaderFloat64) (bool32ToBool shaderInt64) (bool32ToBool shaderInt16) (bool32ToBool shaderResourceResidency) (bool32ToBool shaderResourceMinLod) (bool32ToBool sparseBinding) (bool32ToBool sparseResidencyBuffer) (bool32ToBool sparseResidencyImage2D) (bool32ToBool sparseResidencyImage3D) (bool32ToBool sparseResidency2Samples) (bool32ToBool sparseResidency4Samples) (bool32ToBool sparseResidency8Samples) (bool32ToBool sparseResidency16Samples) (bool32ToBool sparseResidencyAliased) (bool32ToBool variableMultisampleRate) (bool32ToBool inheritedQueries)++instance Storable PhysicalDeviceFeatures where+  sizeOf ~_ = 220+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PhysicalDeviceFeatures where+  zero = PhysicalDeviceFeatures+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkPhysicalDeviceSparseProperties - Structure specifying physical device+-- sparse memory properties+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'PhysicalDeviceProperties'+data PhysicalDeviceSparseProperties = PhysicalDeviceSparseProperties+  { -- | @residencyStandard2DBlockShape@ is 'Vulkan.Core10.FundamentalTypes.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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle Standard Sparse Image Block Shapes (Single Sample)>+    -- table. If this property is not supported the value returned in the+    -- @imageGranularity@ member of the+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'+    -- structure for single-sample 2D images is not /required/ to match the+    -- standard sparse image block dimensions listed in the table.+    residencyStandard2DBlockShape :: Bool+  , -- | @residencyStandard2DMultisampleBlockShape@ is+    -- 'Vulkan.Core10.FundamentalTypes.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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapesmsaa Standard Sparse Image Block Shapes (MSAA)>+    -- table. If this property is not supported, the value returned in the+    -- @imageGranularity@ member of the+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'+    -- structure for multisample 2D images is not /required/ to match the+    -- standard sparse image block dimensions listed in the table.+    residencyStandard2DMultisampleBlockShape :: Bool+  , -- | @residencyStandard3DBlockShape@ is 'Vulkan.Core10.FundamentalTypes.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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle Standard Sparse Image Block Shapes (Single Sample)>+    -- table. If this property is not supported, the value returned in the+    -- @imageGranularity@ member of the+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'+    -- structure for 3D images is not /required/ to match the standard sparse+    -- image block dimensions listed in the table.+    residencyStandard3DBlockShape :: Bool+  , -- | @residencyAlignedMipSize@ is 'Vulkan.Core10.FundamentalTypes.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+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'+    -- structure will be placed in the mip tail. If this property is reported+    -- the implementation is allowed to return+    -- 'Vulkan.Core10.Enums.SparseImageFormatFlagBits.SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT'+    -- in the @flags@ member of+    -- 'Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties',+    -- 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.+    residencyAlignedMipSize :: Bool+  , -- | @residencyNonResidentStrict@ specifies whether the physical device /can/+    -- consistently access non-resident regions of a resource. If this property+    -- is 'Vulkan.Core10.FundamentalTypes.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.+    residencyNonResidentStrict :: Bool+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceSparseProperties)+#endif+deriving instance Show PhysicalDeviceSparseProperties++instance ToCStruct PhysicalDeviceSparseProperties where+  withCStruct x f = allocaBytesAligned 20 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PhysicalDeviceSparseProperties{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (residencyStandard2DBlockShape))+    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (residencyStandard2DMultisampleBlockShape))+    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (residencyStandard3DBlockShape))+    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (residencyAlignedMipSize))+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (residencyNonResidentStrict))+    f+  cStructSize = 20+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 4 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 8 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 12 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))+    f++instance FromCStruct PhysicalDeviceSparseProperties where+  peekCStruct p = do+    residencyStandard2DBlockShape <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))+    residencyStandard2DMultisampleBlockShape <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))+    residencyStandard3DBlockShape <- peek @Bool32 ((p `plusPtr` 8 :: Ptr Bool32))+    residencyAlignedMipSize <- peek @Bool32 ((p `plusPtr` 12 :: Ptr Bool32))+    residencyNonResidentStrict <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))+    pure $ PhysicalDeviceSparseProperties+             (bool32ToBool residencyStandard2DBlockShape) (bool32ToBool residencyStandard2DMultisampleBlockShape) (bool32ToBool residencyStandard3DBlockShape) (bool32ToBool residencyAlignedMipSize) (bool32ToBool residencyNonResidentStrict)++instance Storable PhysicalDeviceSparseProperties where+  sizeOf ~_ = 20+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PhysicalDeviceSparseProperties where+  zero = PhysicalDeviceSparseProperties+           zero+           zero+           zero+           zero+           zero+++-- | VkPhysicalDeviceLimits - Structure reporting implementation-dependent+-- physical device limits+--+-- = Members+--+-- The 'PhysicalDeviceLimits' are properties of the physical device. These+-- are available in the @limits@ member of the 'PhysicalDeviceProperties'+-- structure which is returned from 'getPhysicalDeviceProperties'.+--+-- = Description+--+-- [1]+--     For all bitmasks of+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits', 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+--     'getPhysicalDeviceImageFormatProperties' as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supported-sample-counts Supported Sample Counts>.+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'PhysicalDeviceProperties',+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags'+data PhysicalDeviceLimits = PhysicalDeviceLimits+  { -- | #limits-maxImageDimension1D# @maxImageDimension1D@ is the largest+    -- dimension (@width@) that is guaranteed to be supported for all images+    -- created with an @imageType@ of+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D'. Some combinations of+    -- image parameters (format, usage, etc.) /may/ allow support for larger+    -- dimensions, which /can/ be queried using+    -- 'getPhysicalDeviceImageFormatProperties'.+    maxImageDimension1D :: Word32+  , -- | #limits-maxImageDimension2D# @maxImageDimension2D@ is the largest+    -- dimension (@width@ or @height@) that is guaranteed to be supported for+    -- all images created with an @imageType@ of+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and without+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'+    -- set in @flags@. Some combinations of image parameters (format, usage,+    -- etc.) /may/ allow support for larger dimensions, which /can/ be queried+    -- using 'getPhysicalDeviceImageFormatProperties'.+    maxImageDimension2D :: Word32+  , -- | #limits-maxImageDimension3D# @maxImageDimension3D@ is the largest+    -- dimension (@width@, @height@, or @depth@) that is guaranteed to be+    -- supported for all images created with an @imageType@ of+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D'. Some combinations of+    -- image parameters (format, usage, etc.) /may/ allow support for larger+    -- dimensions, which /can/ be queried using+    -- 'getPhysicalDeviceImageFormatProperties'.+    maxImageDimension3D :: Word32+  , -- | #limits-maxImageDimensionCube# @maxImageDimensionCube@ is the largest+    -- dimension (@width@ or @height@) that is guaranteed to be supported for+    -- all images created with an @imageType@ of+    -- 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and with+    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT'+    -- set in @flags@. Some combinations of image parameters (format, usage,+    -- etc.) /may/ allow support for larger dimensions, which /can/ be queried+    -- using 'getPhysicalDeviceImageFormatProperties'.+    maxImageDimensionCube :: Word32+  , -- | #limits-maxImageArrayLayers# @maxImageArrayLayers@ is the maximum number+    -- of layers (@arrayLayers@) for an image.+    maxImageArrayLayers :: Word32+  , -- | #limits-maxTexelBufferElements# @maxTexelBufferElements@ is the maximum+    -- number of addressable texels for a buffer view created on a buffer which+    -- was created with the+    -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT'+    -- or+    -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT'+    -- set in the @usage@ member of the 'Vulkan.Core10.Buffer.BufferCreateInfo'+    -- structure.+    maxTexelBufferElements :: Word32+  , -- | #limits-maxUniformBufferRange# @maxUniformBufferRange@ is the maximum+    -- value that /can/ be specified in the @range@ member of any+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structures passed to+    -- a call to 'Vulkan.Core10.DescriptorSet.updateDescriptorSets' for+    -- descriptors of type+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'.+    maxUniformBufferRange :: Word32+  , -- | #limits-maxStorageBufferRange# @maxStorageBufferRange@ is the maximum+    -- value that /can/ be specified in the @range@ member of any+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structures passed to+    -- a call to 'Vulkan.Core10.DescriptorSet.updateDescriptorSets' for+    -- descriptors of type+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'.+    maxStorageBufferRange :: Word32+  , -- | #limits-maxPushConstantsSize# @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 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo' structure,+    -- (@offset@ + @size@) /must/ be less than or equal to this limit.+    maxPushConstantsSize :: Word32+  , -- | #limits-maxMemoryAllocationCount# @maxMemoryAllocationCount@ is the+    -- maximum number of device memory allocations, as created by+    -- 'Vulkan.Core10.Memory.allocateMemory', which /can/ simultaneously exist.+    maxMemoryAllocationCount :: Word32+  , -- | #limits-maxSamplerAllocationCount# @maxSamplerAllocationCount@ is the+    -- maximum number of sampler objects, as created by+    -- 'Vulkan.Core10.Sampler.createSampler', which /can/ simultaneously exist+    -- on a device.+    maxSamplerAllocationCount :: Word32+  , -- | #limits-bufferImageGranularity# @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+    -- 'Vulkan.Core10.Handles.DeviceMemory' object without aliasing. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-bufferimagegranularity Buffer-Image Granularity>+    -- for more details.+    bufferImageGranularity :: DeviceSize+  , -- | #limits-sparseAddressSpaceSize# @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.+    sparseAddressSpaceSize :: DeviceSize+  , -- | #limits-maxBoundDescriptorSets# @maxBoundDescriptorSets@ is the maximum+    -- number of descriptor sets that /can/ be simultaneously used by a+    -- pipeline. All 'Vulkan.Core10.Handles.DescriptorSet' decorations in+    -- shader modules /must/ have a value less than @maxBoundDescriptorSets@.+    -- See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sets>.+    maxBoundDescriptorSets :: Word32+  , -- | #limits-maxPerStageDescriptorSamplers# @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. A descriptor is accessible to a shader+    -- stage when the @stageFlags@ member of the+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has+    -- the bit for that shader stage set. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>.+    maxPerStageDescriptorSamplers :: Word32+  , -- | #limits-maxPerStageDescriptorUniformBuffers#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. A descriptor is accessible to a shader+    -- stage when the @stageFlags@ member of the+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has+    -- the bit for that shader stage set. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.+    maxPerStageDescriptorUniformBuffers :: Word32+  , -- | #limits-maxPerStageDescriptorStorageBuffers#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. A descriptor is accessible to a+    -- pipeline shader stage when the @stageFlags@ member of the+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has+    -- the bit for that shader stage set. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.+    maxPerStageDescriptorStorageBuffers :: Word32+  , -- | #limits-maxPerStageDescriptorSampledImages#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. A descriptor is accessible to a+    -- pipeline shader stage when the @stageFlags@ member of the+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has+    -- the bit for that shader stage set. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>,+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage>,+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer>.+    maxPerStageDescriptorSampledImages :: Word32+  , -- | #limits-maxPerStageDescriptorStorageImages#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. A descriptor is accessible to a+    -- pipeline shader stage when the @stageFlags@ member of the+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has+    -- the bit for that shader stage set. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage>,+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer>.+    maxPerStageDescriptorStorageImages :: Word32+  , -- | #limits-maxPerStageDescriptorInputAttachments#+    -- @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. A descriptor is accessible to a+    -- pipeline shader stage when the @stageFlags@ member of the+    -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' structure has+    -- the bit for that shader stage set. These are only supported for the+    -- fragment stage. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment>.+    maxPerStageDescriptorInputAttachments :: Word32+  , -- | #limits-maxPerStageResources# @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+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC',+    -- or 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. For the fragment shader stage the+    -- framebuffer color attachments also count against this limit.+    maxPerStageResources :: Word32+  , -- | #limits-maxDescriptorSetSamplers# @maxDescriptorSetSamplers@ is the+    -- maximum number of samplers that /can/ be included in a pipeline layout.+    -- Descriptors with a type of+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampler>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>.+    maxDescriptorSetSamplers :: Word32+  , -- | #limits-maxDescriptorSetUniformBuffers# @maxDescriptorSetUniformBuffers@+    -- is the maximum number of uniform buffers that /can/ be included in a+    -- pipeline layout. Descriptors with a type of+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbuffer>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.+    maxDescriptorSetUniformBuffers :: Word32+  , -- | #limits-maxDescriptorSetUniformBuffersDynamic#+    -- @maxDescriptorSetUniformBuffersDynamic@ is the maximum number of dynamic+    -- uniform buffers that /can/ be included in a pipeline layout. Descriptors+    -- with a type of+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic>.+    maxDescriptorSetUniformBuffersDynamic :: Word32+  , -- | #limits-maxDescriptorSetStorageBuffers# @maxDescriptorSetStorageBuffers@+    -- is the maximum number of storage buffers that /can/ be included in a+    -- pipeline layout. Descriptors with a type of+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebuffer>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.+    maxDescriptorSetStorageBuffers :: Word32+  , -- | #limits-maxDescriptorSetStorageBuffersDynamic#+    -- @maxDescriptorSetStorageBuffersDynamic@ is the maximum number of dynamic+    -- storage buffers that /can/ be included in a pipeline layout. Descriptors+    -- with a type of+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic>.+    maxDescriptorSetStorageBuffersDynamic :: Word32+  , -- | #limits-maxDescriptorSetSampledImages# @maxDescriptorSetSampledImages@+    -- is the maximum number of sampled images that /can/ be included in a+    -- pipeline layout. Descriptors with a type of+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-combinedimagesampler>,+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-sampledimage>,+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer>.+    maxDescriptorSetSampledImages :: Word32+  , -- | #limits-maxDescriptorSetStorageImages# @maxDescriptorSetStorageImages@+    -- is the maximum number of storage images that /can/ be included in a+    -- pipeline layout. Descriptors with a type of+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', or+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storageimage>,+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer>.+    maxDescriptorSetStorageImages :: Word32+  , -- | #limits-maxDescriptorSetInputAttachments#+    -- @maxDescriptorSetInputAttachments@ is the maximum number of input+    -- attachments that /can/ be included in a pipeline layout. Descriptors+    -- with a type of+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'+    -- count against this limit. Only descriptors in descriptor set layouts+    -- created without the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'+    -- bit set count against this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inputattachment>.+    maxDescriptorSetInputAttachments :: Word32+  , -- | #limits-maxVertexInputAttributes# @maxVertexInputAttributes@ is the+    -- maximum number of vertex input attributes that /can/ be specified for a+    -- graphics pipeline. These are described in the array of+    -- 'Vulkan.Core10.Pipeline.VertexInputAttributeDescription' structures that+    -- are provided at graphics pipeline creation time via the+    -- @pVertexAttributeDescriptions@ member of the+    -- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo' structure.+    -- See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-attrib>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.+    maxVertexInputAttributes :: Word32+  , -- | #limits-maxVertexInputBindings# @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+    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' structures that+    -- are provided at graphics pipeline creation time via the+    -- @pVertexBindingDescriptions@ member of the+    -- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo' structure.+    -- The @binding@ member of+    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' /must/ be less+    -- than this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.+    maxVertexInputBindings :: Word32+  , -- | #limits-maxVertexInputAttributeOffset# @maxVertexInputAttributeOffset@+    -- is the maximum vertex input attribute offset that /can/ be added to the+    -- vertex input binding stride. The @offset@ member of the+    -- 'Vulkan.Core10.Pipeline.VertexInputAttributeDescription' structure+    -- /must/ be less than or equal to this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.+    maxVertexInputAttributeOffset :: Word32+  , -- | #limits-maxVertexInputBindingStride# @maxVertexInputBindingStride@ is+    -- the maximum vertex input binding stride that /can/ be specified in a+    -- vertex input binding. The @stride@ member of the+    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription' structure /must/+    -- be less than or equal to this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input>.+    maxVertexInputBindingStride :: Word32+  , -- | #limits-maxVertexOutputComponents# @maxVertexOutputComponents@ is the+    -- maximum number of components of output variables which /can/ be output+    -- by a vertex shader. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-vertex>.+    maxVertexOutputComponents :: Word32+  , -- | #limits-maxTessellationGenerationLevel# @maxTessellationGenerationLevel@+    -- is the maximum tessellation generation level supported by the+    -- fixed-function tessellation primitive generator. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>.+    maxTessellationGenerationLevel :: Word32+  , -- | #limits-maxTessellationPatchSize# @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+    -- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo' 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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>.+    maxTessellationPatchSize :: Word32+  , -- | #limits-maxTessellationControlPerVertexInputComponents#+    -- @maxTessellationControlPerVertexInputComponents@ is the maximum number+    -- of components of input variables which /can/ be provided as per-vertex+    -- inputs to the tessellation control shader stage.+    maxTessellationControlPerVertexInputComponents :: Word32+  , -- | #limits-maxTessellationControlPerVertexOutputComponents#+    -- @maxTessellationControlPerVertexOutputComponents@ is the maximum number+    -- of components of per-vertex output variables which /can/ be output from+    -- the tessellation control shader stage.+    maxTessellationControlPerVertexOutputComponents :: Word32+  , -- | #limits-maxTessellationControlPerPatchOutputComponents#+    -- @maxTessellationControlPerPatchOutputComponents@ is the maximum number+    -- of components of per-patch output variables which /can/ be output from+    -- the tessellation control shader stage.+    maxTessellationControlPerPatchOutputComponents :: Word32+  , -- | #limits-maxTessellationControlTotalOutputComponents#+    -- @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.+    maxTessellationControlTotalOutputComponents :: Word32+  , -- | #limits-maxTessellationEvaluationInputComponents#+    -- @maxTessellationEvaluationInputComponents@ is the maximum number of+    -- components of input variables which /can/ be provided as per-vertex+    -- inputs to the tessellation evaluation shader stage.+    maxTessellationEvaluationInputComponents :: Word32+  , -- | #limits-maxTessellationEvaluationOutputComponents#+    -- @maxTessellationEvaluationOutputComponents@ is the maximum number of+    -- components of per-vertex output variables which /can/ be output from the+    -- tessellation evaluation shader stage.+    maxTessellationEvaluationOutputComponents :: Word32+  , -- | #limits-maxGeometryShaderInvocations# @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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry>.+    maxGeometryShaderInvocations :: Word32+  , -- | #limits-maxGeometryInputComponents# @maxGeometryInputComponents@ is the+    -- maximum number of components of input variables which /can/ be provided+    -- as inputs to the geometry shader stage.+    maxGeometryInputComponents :: Word32+  , -- | #limits-maxGeometryOutputComponents# @maxGeometryOutputComponents@ is+    -- the maximum number of components of output variables which /can/ be+    -- output from the geometry shader stage.+    maxGeometryOutputComponents :: Word32+  , -- | #limits-maxGeometryOutputVertices# @maxGeometryOutputVertices@ is the+    -- maximum number of vertices which /can/ be emitted by any geometry+    -- shader.+    maxGeometryOutputVertices :: Word32+  , -- | #limits-maxGeometryTotalOutputComponents#+    -- @maxGeometryTotalOutputComponents@ is the maximum total number of+    -- components of output, across all emitted vertices, which /can/ be output+    -- from the geometry shader stage.+    maxGeometryTotalOutputComponents :: Word32+  , -- | #limits-maxFragmentInputComponents# @maxFragmentInputComponents@ is the+    -- maximum number of components of input variables which /can/ be provided+    -- as inputs to the fragment shader stage.+    maxFragmentInputComponents :: Word32+  , -- | #limits-maxFragmentOutputAttachments# @maxFragmentOutputAttachments@ is+    -- the maximum number of output attachments which /can/ be written to by+    -- the fragment shader stage.+    maxFragmentOutputAttachments :: Word32+  , -- | #limits-maxFragmentDualSrcAttachments# @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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dualSrcBlend>.+    maxFragmentDualSrcAttachments :: Word32+  , -- | #limits-maxFragmentCombinedOutputResources#+    -- @maxFragmentCombinedOutputResources@ is the total number of storage+    -- buffers, storage images, and output @Location@ decorated color+    -- attachments (described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-fragmentoutput Fragment Output Interface>)+    -- which /can/ be used in the fragment shader stage.+    maxFragmentCombinedOutputResources :: Word32+  , -- | #limits-maxComputeSharedMemorySize# @maxComputeSharedMemorySize@ is the+    -- maximum total storage size, in bytes, available for variables declared+    -- with the @Workgroup@ storage class in shader modules (or with the+    -- @shared@ storage qualifier in GLSL) in the compute shader stage. The+    -- amount of storage consumed by the variables declared with the+    -- @Workgroup@ storage class is implementation-dependent. However, the+    -- amount of storage consumed may not exceed the largest block size that+    -- would be obtained if all active variables declared with @Workgroup@+    -- storage class were assigned offsets in an arbitrary order by+    -- successively taking the smallest valid offset according to the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Storage Buffer Layout>+    -- rules. (This is equivalent to using the GLSL std430 layout rules.)+    maxComputeSharedMemorySize :: Word32+  , -- | #limits-maxComputeWorkGroupCount# @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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dispatch>.+    maxComputeWorkGroupCount :: (Word32, Word32, Word32)+  , -- | #limits-maxComputeWorkGroupInvocations# @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 or by the object+    -- decorated by the @WorkgroupSize@ decoration, /must/ be less than or+    -- equal to this limit.+    maxComputeWorkGroupInvocations :: Word32+  , -- | #limits-maxComputeWorkGroupSize# @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, as specified by+    -- the @LocalSize@ execution mode or by the object decorated by the+    -- @WorkgroupSize@ decoration in shader modules, /must/ be less than or+    -- equal to the corresponding limit.+    maxComputeWorkGroupSize :: (Word32, Word32, Word32)+  , -- | #limits-subPixelPrecisionBits# @subPixelPrecisionBits@ is the number of+    -- bits of subpixel precision in framebuffer coordinates xf and yf. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast>.+    subPixelPrecisionBits :: Word32+  , -- | #limits-subTexelPrecisionBits# @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.+    subTexelPrecisionBits :: Word32+  , -- | #limits-mipmapPrecisionBits# @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.+    mipmapPrecisionBits :: Word32+  , -- | #limits-maxDrawIndexedIndexValue# @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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fullDrawIndexUint32 fullDrawIndexUint32>.+    maxDrawIndexedIndexValue :: Word32+  , -- | #limits-maxDrawIndirectCount# @maxDrawIndirectCount@ is the maximum draw+    -- count that is supported for indirect draw calls. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multiDrawIndirect>.+    maxDrawIndirectCount :: Word32+  , -- | #limits-maxSamplerLodBias# @maxSamplerLodBias@ is the maximum absolute+    -- sampler LOD bias. The sum of the @mipLodBias@ member of the+    -- 'Vulkan.Core10.Sampler.SamplerCreateInfo' 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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-mipLodBias>.+    maxSamplerLodBias :: Float+  , -- | #limits-maxSamplerAnisotropy# @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 'Vulkan.Core10.Sampler.SamplerCreateInfo'+    -- structure and this limit. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-maxAnisotropy>.+    maxSamplerAnisotropy :: Float+  , -- | #limits-maxViewports# @maxViewports@ is the maximum number of active+    -- viewports. The @viewportCount@ member of the+    -- 'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' structure that+    -- is provided at pipeline creation /must/ be less than or equal to this+    -- limit.+    maxViewports :: Word32+  , -- | #limits-maxViewportDimensions# @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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport Controlling the Viewport>.+    maxViewportDimensions :: (Word32, Word32)+  , -- | #limits-viewportboundsrange# @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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-viewport Controlling the 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.+    viewportBoundsRange :: (Float, Float)+  , -- | #limits-viewportSubPixelBits# @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.+    viewportSubPixelBits :: Word32+  , -- | #limits-minMemoryMapAlignment# @minMemoryMapAlignment@ is the minimum+    -- /required/ alignment, in bytes, of host visible memory allocations+    -- within the host address space. When mapping a memory allocation with+    -- 'Vulkan.Core10.Memory.mapMemory', subtracting @offset@ bytes from the+    -- returned pointer will always produce an integer multiple of this limit.+    -- See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess>.+    minMemoryMapAlignment :: Word64+  , -- | #limits-minTexelBufferOffsetAlignment# @minTexelBufferOffsetAlignment@+    -- is the minimum /required/ alignment, in bytes, for the @offset@ member+    -- of the 'Vulkan.Core10.BufferView.BufferViewCreateInfo' structure for+    -- texel buffers. If+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>+    -- is enabled, this limit is equivalent to the maximum of the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetAlignmentBytes uniformTexelBufferOffsetAlignmentBytes>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetAlignmentBytes storageTexelBufferOffsetAlignmentBytes>+    -- members of+    -- 'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentPropertiesEXT',+    -- but smaller alignment is optionally: allowed by+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-storageTexelBufferOffsetSingleTexelAlignment storageTexelBufferOffsetSingleTexelAlignment>+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-uniformTexelBufferOffsetSingleTexelAlignment uniformTexelBufferOffsetSingleTexelAlignment>.+    -- If+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-texelBufferAlignment texelBufferAlignment>+    -- is not enabled,+    -- 'Vulkan.Core10.BufferView.BufferViewCreateInfo'::@offset@ /must/ be a+    -- multiple of this value.+    minTexelBufferOffsetAlignment :: DeviceSize+  , -- | #limits-minUniformBufferOffsetAlignment#+    -- @minUniformBufferOffsetAlignment@ is the minimum /required/ alignment,+    -- in bytes, for the @offset@ member of the+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structure for uniform+    -- buffers. When a descriptor of type+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.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.+    minUniformBufferOffsetAlignment :: DeviceSize+  , -- | #limits-minStorageBufferOffsetAlignment#+    -- @minStorageBufferOffsetAlignment@ is the minimum /required/ alignment,+    -- in bytes, for the @offset@ member of the+    -- 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' structure for storage+    -- buffers. When a descriptor of type+    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' or+    -- 'Vulkan.Core10.Enums.DescriptorType.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.+    minStorageBufferOffsetAlignment :: DeviceSize+  , -- | #limits-minTexelOffset# @minTexelOffset@ is the minimum offset value for+    -- the @ConstOffset@ image operand of any of the @OpImageSample@* or+    -- @OpImageFetch@* image instructions.+    minTexelOffset :: Int32+  , -- | #limits-maxTexelOffset# @maxTexelOffset@ is the maximum offset value for+    -- the @ConstOffset@ image operand of any of the @OpImageSample@* or+    -- @OpImageFetch@* image instructions.+    maxTexelOffset :: Word32+  , -- | #limits-minTexelGatherOffset# @minTexelGatherOffset@ is the minimum+    -- offset value for the @Offset@, @ConstOffset@, or @ConstOffsets@ image+    -- operands of any of the @OpImage@*@Gather@ image instructions.+    minTexelGatherOffset :: Int32+  , -- | #limits-maxTexelGatherOffset# @maxTexelGatherOffset@ is the maximum+    -- offset value for the @Offset@, @ConstOffset@, or @ConstOffsets@ image+    -- operands of any of the @OpImage@*@Gather@ image instructions.+    maxTexelGatherOffset :: Word32+  , -- | #limits-minInterpolationOffset# @minInterpolationOffset@ is the base+    -- minimum (inclusive) negative offset value for the @Offset@ operand of+    -- the @InterpolateAtOffset@ extended instruction.+    minInterpolationOffset :: Float+  , -- | #limits-maxInterpolationOffset# @maxInterpolationOffset@ is the base+    -- maximum (inclusive) positive offset value for the @Offset@ operand of+    -- the @InterpolateAtOffset@ extended instruction.+    maxInterpolationOffset :: Float+  , -- | #limits-subPixelInterpolationOffsetBits#+    -- @subPixelInterpolationOffsetBits@ is the number of fractional bits that+    -- the @x@ and @y@ offsets to the @InterpolateAtOffset@ extended+    -- instruction /may/ be rounded to as fixed-point values.+    subPixelInterpolationOffsetBits :: Word32+  , -- | #limits-maxFramebufferWidth# @maxFramebufferWidth@ is the maximum width+    -- for a framebuffer. The @width@ member of the+    -- 'Vulkan.Core10.Pass.FramebufferCreateInfo' structure /must/ be less than+    -- or equal to this limit.+    maxFramebufferWidth :: Word32+  , -- | #limits-maxFramebufferHeight# @maxFramebufferHeight@ is the maximum+    -- height for a framebuffer. The @height@ member of the+    -- 'Vulkan.Core10.Pass.FramebufferCreateInfo' structure /must/ be less than+    -- or equal to this limit.+    maxFramebufferHeight :: Word32+  , -- | #limits-maxFramebufferLayers# @maxFramebufferLayers@ is the maximum+    -- layer count for a layered framebuffer. The @layers@ member of the+    -- 'Vulkan.Core10.Pass.FramebufferCreateInfo' structure /must/ be less than+    -- or equal to this limit.+    maxFramebufferLayers :: Word32+  , -- | #limits-framebufferColorSampleCounts# @framebufferColorSampleCounts@ is+    -- a bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the color sample counts that are supported for all framebuffer color+    -- attachments with floating- or fixed-point formats. For color attachments+    -- with integer formats, see+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-framebufferIntegerColorSampleCounts framebufferIntegerColorSampleCounts>.+    framebufferColorSampleCounts :: SampleCountFlags+  , -- | #limits-framebufferDepthSampleCounts# @framebufferDepthSampleCounts@ is+    -- a bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the supported depth sample counts for all framebuffer depth\/stencil+    -- attachments, when the format includes a depth component.+    framebufferDepthSampleCounts :: SampleCountFlags+  , -- | #limits-framebufferStencilSampleCounts# @framebufferStencilSampleCounts@+    -- is a bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the supported stencil sample counts for all framebuffer depth\/stencil+    -- attachments, when the format includes a stencil component.+    framebufferStencilSampleCounts :: SampleCountFlags+  , -- | #limits-framebufferNoAttachmentsSampleCounts#+    -- @framebufferNoAttachmentsSampleCounts@ is a bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the supported sample counts for a+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments subpass which uses no attachments>.+    framebufferNoAttachmentsSampleCounts :: SampleCountFlags+  , -- | #limits-maxColorAttachments# @maxColorAttachments@ is the maximum number+    -- of color attachments that /can/ be used by a subpass in a render pass.+    -- The @colorAttachmentCount@ member of the+    -- 'Vulkan.Core10.Pass.SubpassDescription' or+    -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2'+    -- structure /must/ be less than or equal to this limit.+    maxColorAttachments :: Word32+  , -- | #limits-sampledImageColorSampleCounts# @sampledImageColorSampleCounts@+    -- is a bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the sample counts supported for all 2D images created with+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@+    -- containing+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a+    -- non-integer color format.+    sampledImageColorSampleCounts :: SampleCountFlags+  , -- | #limits-sampledImageIntegerSampleCounts#+    -- @sampledImageIntegerSampleCounts@ is a bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the sample counts supported for all 2D images created with+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@+    -- containing+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and an+    -- integer color format.+    sampledImageIntegerSampleCounts :: SampleCountFlags+  , -- | #limits-sampledImageDepthSampleCounts# @sampledImageDepthSampleCounts@+    -- is a bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the sample counts supported for all 2D images created with+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@+    -- containing+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a+    -- depth format.+    sampledImageDepthSampleCounts :: SampleCountFlags+  , -- | #limits-sampledImageStencilSampleCounts#+    -- @sampledImageStencilSampleCounts@ is a bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the sample supported for all 2D images created with+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', @usage@+    -- containing+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', and a+    -- stencil format.+    sampledImageStencilSampleCounts :: SampleCountFlags+  , -- | #limits-storageImageSampleCounts# @storageImageSampleCounts@ is a+    -- bitmask1 of+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating+    -- the sample counts supported for all 2D images created with+    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', and @usage@+    -- containing+    -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT'.+    storageImageSampleCounts :: SampleCountFlags+  , -- | #limits-maxSampleMaskWords# @maxSampleMaskWords@ is the maximum number+    -- of array elements of a variable decorated with the+    -- 'Vulkan.Core10.FundamentalTypes.SampleMask' built-in decoration.+    maxSampleMaskWords :: Word32+  , -- | #limits-timestampComputeAndGraphics# @timestampComputeAndGraphics@+    -- specifies support for timestamps on all graphics and compute queues. If+    -- this limit is set to 'Vulkan.Core10.FundamentalTypes.TRUE', all queues+    -- that advertise the+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT' in the+    -- 'QueueFamilyProperties'::@queueFlags@ support+    -- 'QueueFamilyProperties'::@timestampValidBits@ of at least 36. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps Timestamp Queries>.+    timestampComputeAndGraphics :: Bool+  , -- | #limits-timestampPeriod# @timestampPeriod@ is the number of nanoseconds+    -- /required/ for a timestamp query to be incremented by 1. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-timestamps Timestamp Queries>.+    timestampPeriod :: Float+  , -- | #limits-maxClipDistances# @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.+    maxClipDistances :: Word32+  , -- | #limits-maxCullDistances# @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.+    maxCullDistances :: Word32+  , -- | #limits-maxCombinedClipAndCullDistances#+    -- @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.+    maxCombinedClipAndCullDistances :: Word32+  , -- | #limits-discreteQueuePriorities# @discreteQueuePriorities@ is the number+    -- of discrete priorities that /can/ be assigned to a queue based on the+    -- value of each member of+    -- 'Vulkan.Core10.Device.DeviceQueueCreateInfo'::@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+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-priority>.+    discreteQueuePriorities :: Word32+  , -- | #limits-pointSizeRange# @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.+    pointSizeRange :: (Float, Float)+  , -- | #limits-lineWidthRange# @lineWidthRange@[2] is the range+    -- [@minimum@,@maximum@] of supported widths for lines. Values specified by+    -- the @lineWidth@ member of the+    -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo' or the+    -- @lineWidth@ parameter to+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' are clamped to+    -- this range.+    lineWidthRange :: (Float, Float)+  , -- | #limits-pointSizeGranularity# @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.+    pointSizeGranularity :: Float+  , -- | #limits-lineWidthGranularity# @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.+    lineWidthGranularity :: Float+  , -- | #limits-strictLines# @strictLines@ specifies whether lines are+    -- rasterized according to the preferred method of rasterization. If set to+    -- 'Vulkan.Core10.FundamentalTypes.FALSE', lines /may/ be rasterized under+    -- a relaxed set of rules. If set to 'Vulkan.Core10.FundamentalTypes.TRUE',+    -- lines are rasterized as per the strict definition. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-basic Basic Line Segment Rasterization>.+    strictLines :: Bool+  , -- | #limits-standardSampleLocations# @standardSampleLocations@ specifies+    -- whether rasterization uses the standard sample locations as documented+    -- in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling Multisampling>.+    -- If set to 'Vulkan.Core10.FundamentalTypes.TRUE', the implementation uses+    -- the documented sample locations. If set to+    -- 'Vulkan.Core10.FundamentalTypes.FALSE', the implementation /may/ use+    -- different sample locations.+    standardSampleLocations :: Bool+  , -- | #limits-optimalBufferCopyOffsetAlignment#+    -- @optimalBufferCopyOffsetAlignment@ is the optimal buffer offset+    -- alignment in bytes for+    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyBufferToImage2KHR',+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',+    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyImageToBuffer2KHR', and+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. The per+    -- texel alignment requirements are enforced, but applications /should/ use+    -- the optimal alignment for optimal performance and power use.+    optimalBufferCopyOffsetAlignment :: DeviceSize+  , -- | #limits-optimalBufferCopyRowPitchAlignment#+    -- @optimalBufferCopyRowPitchAlignment@ is the optimal buffer row pitch+    -- alignment in bytes for+    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyBufferToImage2KHR',+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage',+    -- 'Vulkan.Extensions.VK_KHR_copy_commands2.cmdCopyImageToBuffer2KHR', and+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer'. 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.+    optimalBufferCopyRowPitchAlignment :: DeviceSize+  , -- | #limits-nonCoherentAtomSize# @nonCoherentAtomSize@ is the size and+    -- alignment in bytes that bounds concurrent access to     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-device-hostaccess host-mapped device memory>.     nonCoherentAtomSize :: DeviceSize   }
src/Vulkan/Core10/Enums/DynamicState.hs view
@@ -224,8 +224,12 @@ pattern DYNAMIC_STATE_LINE_STIPPLE_EXT = DynamicState 1000259000 -- | 'DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR' specifies that state in -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'+-- and+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV' -- will be ignored and /must/ be set dynamically with -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR'+-- or+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.cmdSetFragmentShadingRateEnumNV' -- before any draw commands. pattern DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = DynamicState 1000226000 -- | 'DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV' specifies that the
src/Vulkan/Core10/Enums/PipelineStageFlagBits.hs view
@@ -106,7 +106,8 @@ -- | 'PIPELINE_STAGE_COMPUTE_SHADER_BIT' specifies the execution of a compute -- shader. pattern PIPELINE_STAGE_COMPUTE_SHADER_BIT = PipelineStageFlagBits 0x00000800--- | 'PIPELINE_STAGE_TRANSFER_BIT' specifies the following commands:+-- | #synchronization-pipeline-stages-transfer# 'PIPELINE_STAGE_TRANSFER_BIT'+-- specifies the following commands: -- -- -   All --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies copy commands>,
src/Vulkan/Core10/Enums/SampleCountFlagBits.hs view
@@ -35,6 +35,7 @@ -- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentDescription2', -- 'Vulkan.Extensions.VK_NV_coverage_reduction_mode.FramebufferMixedSamplesCombinationNV', -- 'Vulkan.Core10.Image.ImageCreateInfo',+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsPropertiesNV', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRatePropertiesKHR', -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceSparseImageFormatInfo2', -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo',
src/Vulkan/Core10/Enums/SamplerCreateFlagBits.hs view
@@ -45,8 +45,9 @@ -- the implementation /may/ use approximations when reconstructing a full -- color value for texture access from a subsampled image. pattern SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = SamplerCreateFlagBits 0x00000002--- | 'SAMPLER_CREATE_SUBSAMPLED_BIT_EXT' specifies that the sampler will read--- from an image created with @flags@ containing+-- | #samplers-subsamplesampler# 'SAMPLER_CREATE_SUBSAMPLED_BIT_EXT'+-- specifies that the sampler will read from an image created with @flags@+-- containing -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'. pattern SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = SamplerCreateFlagBits 0x00000001 
src/Vulkan/Core10/Enums/StructureType.hs view
@@ -65,6 +65,9 @@                                                         , STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT+                                                        , STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV+                                                        , STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV                                                         , STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV                                                         , STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT@@ -763,6 +766,8 @@ -- 'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT', -- 'Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsFeaturesNV',+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsPropertiesNV', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRateFeaturesKHR', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRateKHR', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRatePropertiesKHR',@@ -867,6 +872,7 @@ -- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableInternalRepresentationKHR', -- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutablePropertiesKHR', -- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineExecutableStatisticKHR',+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR', -- 'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PipelineInfoKHR', -- 'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo',@@ -1104,6 +1110,12 @@ pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = StructureType 1000332001 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT" pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = StructureType 1000332000+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV"+pattern STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = StructureType 1000326002+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV"+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = StructureType 1000326001+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV"+pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = StructureType 1000326000 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV" pattern STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = StructureType 1000300001 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"@@ -1970,6 +1982,9 @@              STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM,              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT,              STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT,+             STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV,+             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV,+             STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV,              STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV,              STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV,              STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT,@@ -2439,6 +2454,9 @@     STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM -> showString "STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM"     STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT"     STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT"+    STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV"+    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV"+    STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV"     STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV -> showString "STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV"     STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV"     STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT -> showString "STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT"@@ -2908,6 +2926,9 @@                             , ("STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM", pure STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM)                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT)                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT)+                            , ("STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV", pure STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV)+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV)+                            , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV)                             , ("STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV", pure STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV)                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV)                             , ("STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT", pure STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT)
src/Vulkan/Core10/Event.hs view
@@ -77,7 +77,8 @@ -- -- == Valid Usage ----- -   If the @VK_KHR_portability_subset@ extension is enabled, and+-- -   #VUID-vkCreateEvent-events-04468# If the @VK_KHR_portability_subset@+--     extension is enabled, and --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@events@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE', then the implementation --     does not support@@ -86,17 +87,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateEvent-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'EventCreateInfo'---     structure+-- -   #VUID-vkCreateEvent-pCreateInfo-parameter# @pCreateInfo@ /must/ be a+--     valid pointer to a valid 'EventCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateEvent-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pEvent@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Event' handle+-- -   #VUID-vkCreateEvent-pEvent-parameter# @pEvent@ /must/ be a valid+--     pointer to a 'Vulkan.Core10.Handles.Event' handle -- -- == Return Codes --@@ -167,29 +169,33 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @event@ /must/ have completed---     execution+-- -   #VUID-vkDestroyEvent-event-01145# All submitted commands that refer+--     to @event@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyEvent-event-01146# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @event@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyEvent-event-01147# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @event@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyEvent-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   If @event@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @event@---     /must/ be a valid 'Vulkan.Core10.Handles.Event' handle+-- -   #VUID-vkDestroyEvent-event-parameter# If @event@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @event@ /must/ be a valid+--     'Vulkan.Core10.Handles.Event' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyEvent-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @event@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyEvent-event-parent# If @event@ is a valid handle, it+--     /must/ have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -283,13 +289,16 @@                 . (MonadIO io)                => -- | @device@ is the logical device that owns the event.                   ---                  -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                  -- #VUID-vkGetEventStatus-device-parameter# @device@ /must/ be a valid+                  -- 'Vulkan.Core10.Handles.Device' handle                   Device                -> -- | @event@ is the handle of the event to query.                   ---                  -- @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle+                  -- #VUID-vkGetEventStatus-event-parameter# @event@ /must/ be a valid+                  -- 'Vulkan.Core10.Handles.Event' handle                   ---                  -- @event@ /must/ have been created, allocated, or retrieved from @device@+                  -- #VUID-vkGetEventStatus-event-parent# @event@ /must/ have been created,+                  -- allocated, or retrieved from @device@                   Event                -> io (Result) getEventStatus device event = liftIO $ do@@ -321,12 +330,14 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkSetEvent-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle+-- -   #VUID-vkSetEvent-event-parameter# @event@ /must/ be a valid+--     'Vulkan.Core10.Handles.Event' handle ----- -   @event@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkSetEvent-event-parent# @event@ /must/ have been created,+--     allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -383,18 +394,20 @@ -- -- == Valid Usage ----- -   @event@ /must/ not be waited on by a+-- -   #VUID-vkResetEvent-event-01148# @event@ /must/ not be waited on by a --     'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents' command that is --     currently executing -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkResetEvent-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @event@ /must/ be a valid 'Vulkan.Core10.Handles.Event' handle+-- -   #VUID-vkResetEvent-event-parameter# @event@ /must/ be a valid+--     'Vulkan.Core10.Handles.Event' handle ----- -   @event@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkResetEvent-event-parent# @event@ /must/ have been created,+--     allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -441,7 +454,7 @@ data EventCreateInfo = EventCreateInfo   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkEventCreateInfo-flags-zerobitmask# @flags@ /must/ be @0@     flags :: EventCreateFlags }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Core10/ExtensionDiscovery.hs view
@@ -102,12 +102,15 @@ -- -- == Valid Usage (Implicit) ----- -   If @pLayerName@ is not @NULL@, @pLayerName@ /must/ be a+-- -   #VUID-vkEnumerateInstanceExtensionProperties-pLayerName-parameter#+--     If @pLayerName@ is not @NULL@, @pLayerName@ /must/ be a --     null-terminated UTF-8 string ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkEnumerateInstanceExtensionProperties-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkEnumerateInstanceExtensionProperties-pProperties-parameter#+--     If the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'ExtensionProperties' structures --@@ -180,15 +183,19 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   If @pLayerName@ is not @NULL@, @pLayerName@ /must/ be a---     null-terminated UTF-8 string+-- -   #VUID-vkEnumerateDeviceExtensionProperties-pLayerName-parameter# If+--     @pLayerName@ is not @NULL@, @pLayerName@ /must/ be a null-terminated+--     UTF-8 string ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkEnumerateDeviceExtensionProperties-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkEnumerateDeviceExtensionProperties-pProperties-parameter# If+--     the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'ExtensionProperties' structures --
src/Vulkan/Core10/Fence.hs view
@@ -97,17 +97,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateFence-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'FenceCreateInfo'---     structure+-- -   #VUID-vkCreateFence-pCreateInfo-parameter# @pCreateInfo@ /must/ be a+--     valid pointer to a valid 'FenceCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateFence-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pFence@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-vkCreateFence-pFence-parameter# @pFence@ /must/ be a valid+--     pointer to a 'Vulkan.Core10.Handles.Fence' handle -- -- == Return Codes --@@ -178,30 +179,34 @@ -- -- == Valid Usage ----- -   All+-- -   #VUID-vkDestroyFence-fence-01120# All --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#devsandqueues-submission queue submission> --     commands that refer to @fence@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyFence-fence-01121# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @fence@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyFence-fence-01122# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @fence@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyFence-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-vkDestroyFence-fence-parameter# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be a valid+--     'Vulkan.Core10.Handles.Fence' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyFence-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @fence@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyFence-fence-parent# If @fence@ is a valid handle, it+--     /must/ have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -261,20 +266,24 @@ -- -- == Valid Usage ----- -   Each element of @pFences@ /must/ not be currently associated with---     any queue command that has not yet completed execution on that queue+-- -   #VUID-vkResetFences-pFences-01123# Each element of @pFences@ /must/+--     not be currently associated with any queue command that has not yet+--     completed execution on that queue -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkResetFences-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pFences@ /must/ be a valid pointer to an array of @fenceCount@---     valid 'Vulkan.Core10.Handles.Fence' handles+-- -   #VUID-vkResetFences-pFences-parameter# @pFences@ /must/ be a valid+--     pointer to an array of @fenceCount@ valid+--     'Vulkan.Core10.Handles.Fence' handles ----- -   @fenceCount@ /must/ be greater than @0@+-- -   #VUID-vkResetFences-fenceCount-arraylength# @fenceCount@ /must/ be+--     greater than @0@ ----- -   Each element of @pFences@ /must/ have been created, allocated, or---     retrieved from @device@+-- -   #VUID-vkResetFences-pFences-parent# Each element of @pFences@ /must/+--     have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -374,13 +383,16 @@                 . (MonadIO io)                => -- | @device@ is the logical device that owns the fence.                   ---                  -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                  -- #VUID-vkGetFenceStatus-device-parameter# @device@ /must/ be a valid+                  -- 'Vulkan.Core10.Handles.Device' handle                   Device                -> -- | @fence@ is the handle of the fence to query.                   ---                  -- @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+                  -- #VUID-vkGetFenceStatus-fence-parameter# @fence@ /must/ be a valid+                  -- 'Vulkan.Core10.Handles.Fence' handle                   ---                  -- @fence@ /must/ have been created, allocated, or retrieved from @device@+                  -- #VUID-vkGetFenceStatus-fence-parent# @fence@ /must/ have been created,+                  -- allocated, or retrieved from @device@                   Fence                -> io (Result) getFenceStatus device fence = liftIO $ do@@ -473,15 +485,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkWaitForFences-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pFences@ /must/ be a valid pointer to an array of @fenceCount@---     valid 'Vulkan.Core10.Handles.Fence' handles+-- -   #VUID-vkWaitForFences-pFences-parameter# @pFences@ /must/ be a valid+--     pointer to an array of @fenceCount@ valid+--     'Vulkan.Core10.Handles.Fence' handles ----- -   @fenceCount@ /must/ be greater than @0@+-- -   #VUID-vkWaitForFences-fenceCount-arraylength# @fenceCount@ /must/ be+--     greater than @0@ ----- -   Each element of @pFences@ /must/ have been created, allocated, or---     retrieved from @device@+-- -   #VUID-vkWaitForFences-pFences-parent# Each element of @pFences@+--     /must/ have been created, allocated, or retrieved from @device@ -- -- == Return Codes --@@ -550,20 +565,21 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFenceCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_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+-- -   #VUID-VkFenceCreateInfo-pNext-pNext# 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 --     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo' --     or --     'Vulkan.Extensions.VK_KHR_external_fence_win32.ExportFenceWin32HandleInfoKHR' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkFenceCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkFenceCreateInfo-flags-parameter# @flags@ /must/ be a valid+--     combination of --     'Vulkan.Core10.Enums.FenceCreateFlagBits.FenceCreateFlagBits' values -- -- = See Also
src/Vulkan/Core10/FundamentalTypes.hs view
@@ -430,6 +430,7 @@ -- 'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT', -- 'Vulkan.Extensions.VK_NV_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesNV', -- 'Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsFeaturesNV', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRateFeaturesKHR', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRatePropertiesKHR', -- 'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.PhysicalDeviceGroupProperties',
src/Vulkan/Core10/Handles.hs view
@@ -559,6 +559,7 @@ -- 'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT', -- 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent', -- 'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV',+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.cmdSetFragmentShadingRateEnumNV', -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetFrontFaceEXT', -- 'Vulkan.Extensions.VK_EXT_line_rasterization.cmdSetLineStippleEXT',
src/Vulkan/Core10/Image.hs view
@@ -108,7 +108,8 @@ -- -- == Valid Usage ----- -   If the @flags@ member of @pCreateInfo@ includes+-- -   #VUID-vkCreateImage-flags-00939# If the @flags@ member of+--     @pCreateInfo@ includes --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT', --     creating this 'Vulkan.Core10.Handles.Image' /must/ not cause the --     total required sparse memory for all currently valid sparse@@ -117,17 +118,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateImage-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid 'ImageCreateInfo'---     structure+-- -   #VUID-vkCreateImage-pCreateInfo-parameter# @pCreateInfo@ /must/ be a+--     valid pointer to a valid 'ImageCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateImage-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pImage@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-vkCreateImage-pImage-parameter# @pImage@ /must/ be a valid+--     pointer to a 'Vulkan.Core10.Handles.Image' handle -- -- == Return Codes --@@ -198,29 +200,34 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @image@, either directly or via---     a 'Vulkan.Core10.Handles.ImageView', /must/ have completed execution+-- -   #VUID-vkDestroyImage-image-01000# All submitted commands that refer+--     to @image@, either directly or via a+--     'Vulkan.Core10.Handles.ImageView', /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyImage-image-01001# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @image@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyImage-image-01002# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @image@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyImage-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@---     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-vkDestroyImage-image-parameter# If @image@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@ /must/ be a valid+--     'Vulkan.Core10.Handles.Image' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyImage-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @image@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyImage-image-parent# If @image@ is a valid handle, it+--     /must/ have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -296,49 +303,54 @@ -- -- == Valid Usage ----- -   @image@ /must/ have been created with @tiling@ equal to+-- -   #VUID-vkGetImageSubresourceLayout-image-02270# @image@ /must/ have+--     been created with @tiling@ equal to --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT' ----- -   The @aspectMask@ member of @pSubresource@ /must/ only have a single---     bit set+-- -   #VUID-vkGetImageSubresourceLayout-aspectMask-00997# The @aspectMask@+--     member of @pSubresource@ /must/ only have a single bit set ----- -   The @mipLevel@ member of @pSubresource@ /must/ be less than the---     @mipLevels@ specified in 'ImageCreateInfo' when @image@ was created+-- -   #VUID-vkGetImageSubresourceLayout-mipLevel-01716# The @mipLevel@+--     member of @pSubresource@ /must/ be less than the @mipLevels@+--     specified in 'ImageCreateInfo' when @image@ was created ----- -   The @arrayLayer@ member of @pSubresource@ /must/ be less than the---     @arrayLayers@ specified in 'ImageCreateInfo' when @image@ was---     created+-- -   #VUID-vkGetImageSubresourceLayout-arrayLayer-01717# The @arrayLayer@+--     member of @pSubresource@ /must/ be less than the @arrayLayers@+--     specified in 'ImageCreateInfo' when @image@ was created ----- -   If @format@ is a color format, the @aspectMask@ member of---     @pSubresource@ /must/ be+-- -   #VUID-vkGetImageSubresourceLayout-format-04461# If @format@ is a+--     color format, the @aspectMask@ member of @pSubresource@ /must/ be --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT' ----- -   If @format@ has a depth component, the @aspectMask@ member of---     @pSubresource@ /must/ contain+-- -   #VUID-vkGetImageSubresourceLayout-format-04462# If @format@ has a+--     depth component, the @aspectMask@ member of @pSubresource@ /must/+--     contain --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' ----- -   If @format@ has a stencil component, the @aspectMask@ member of---     @pSubresource@ /must/ contain+-- -   #VUID-vkGetImageSubresourceLayout-format-04463# If @format@ has a+--     stencil component, the @aspectMask@ member of @pSubresource@ /must/+--     contain --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT' ----- -   If @format@ does not contain a stencil or depth component, the---     @aspectMask@ member of @pSubresource@ /must/ not contain+-- -   #VUID-vkGetImageSubresourceLayout-format-04464# If @format@ does not+--     contain a stencil or depth component, the @aspectMask@ member of+--     @pSubresource@ /must/ not contain --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT' ----- -   If the @tiling@ of the @image@ is---     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its---     @format@ is a+-- -   #VUID-vkGetImageSubresourceLayout-format-01581# If the @tiling@ of+--     the @image@ is 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'+--     and its @format@ is a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format> --     with two planes, the @aspectMask@ member of @pSubresource@ /must/ be --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT' --     or --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT' ----- -   If the @tiling@ of the @image@ is---     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its---     @format@ is a+-- -   #VUID-vkGetImageSubresourceLayout-format-01582# If the @tiling@ of+--     the @image@ is 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR'+--     and its @format@ is a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format> --     with three planes, the @aspectMask@ member of @pSubresource@ /must/ --     be@@ -347,11 +359,13 @@ --     or --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' ----- -   If @image@ was created with the+-- -   #VUID-vkGetImageSubresourceLayout-image-01895# If @image@ was+--     created with the --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID' --     external memory handle type, then @image@ /must/ be bound to memory ----- -   If the @tiling@ of the @image@ is+-- -   #VUID-vkGetImageSubresourceLayout-tiling-02271# If the @tiling@ of+--     the @image@ is --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT', --     then the @aspectMask@ member of @pSubresource@ /must/ be --     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ and the index @i@ /must/ be@@ -362,19 +376,22 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetImageSubresourceLayout-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-vkGetImageSubresourceLayout-image-parameter# @image@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Image' handle ----- -   @pSubresource@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetImageSubresourceLayout-pSubresource-parameter#+--     @pSubresource@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.SparseResourceMemoryManagement.ImageSubresource' --     structure ----- -   @pLayout@ /must/ be a valid pointer to a 'SubresourceLayout'---     structure+-- -   #VUID-vkGetImageSubresourceLayout-pLayout-parameter# @pLayout@+--     /must/ be a valid pointer to a 'SubresourceLayout' structure ----- -   @image@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkGetImageSubresourceLayout-image-parent# @image@ /must/ have+--     been created, allocated, or retrieved from @device@ -- -- = See Also --@@ -705,22 +722,23 @@ -- -- = Valid Usage ----- -   Each of the following values (as described in+-- -   #VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251# Each of the+--     following values (as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) --     /must/ not be undefined @imageCreateMaxMipLevels@, --     @imageCreateMaxArrayLayers@, @imageCreateMaxExtent@, and --     @imageCreateSampleCounts@ ----- -   If @sharingMode@ is+-- -   #VUID-VkImageCreateInfo-sharingMode-00941# If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', --     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of --     @queueFamilyIndexCount@ @uint32_t@ values ----- -   If @sharingMode@ is+-- -   #VUID-VkImageCreateInfo-sharingMode-00942# If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', --     @queueFamilyIndexCount@ /must/ be greater than @1@ ----- -   If @sharingMode@ is+-- -   #VUID-VkImageCreateInfo-sharingMode-01420# If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', each --     element of @pQueueFamilyIndices@ /must/ be unique and /must/ be less --     than @pQueueFamilyPropertyCount@ returned by either@@ -729,78 +747,87 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2' --     for the @physicalDevice@ that was used to create @device@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-01974# If the @pNext@ chain includes a --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID' --     structure, and its @externalFormat@ member is non-zero the @format@ --     /must/ be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' ----- -   If the @pNext@ chain does not include a+-- -   #VUID-VkImageCreateInfo-pNext-01975# If the @pNext@ chain does not+--     include a --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID' --     structure, or does and its @externalFormat@ member is @0@, the --     @format@ /must/ not be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' ----- -   @extent.width@ /must/ be greater than @0@+-- -   #VUID-VkImageCreateInfo-extent-00944# @extent.width@ /must/ be+--     greater than @0@ ----- -   @extent.height@ /must/ be greater than @0@+-- -   #VUID-VkImageCreateInfo-extent-00945# @extent.height@ /must/ be+--     greater than @0@ ----- -   @extent.depth@ /must/ be greater than @0@+-- -   #VUID-VkImageCreateInfo-extent-00946# @extent.depth@ /must/ be+--     greater than @0@ ----- -   @mipLevels@ /must/ be greater than @0@+-- -   #VUID-VkImageCreateInfo-mipLevels-00947# @mipLevels@ /must/ be+--     greater than @0@ ----- -   @arrayLayers@ /must/ be greater than @0@+-- -   #VUID-VkImageCreateInfo-arrayLayers-00948# @arrayLayers@ /must/ be+--     greater than @0@ ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-00949# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT', --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02557# If @flags@ contains --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT', --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-00950# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT', --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' ----- -   @extent.width@ /must/ be less than or equal to---     @imageCreateMaxExtent.width@ (as defined in+-- -   #VUID-VkImageCreateInfo-extent-02252# @extent.width@ /must/ be less+--     than or equal to @imageCreateMaxExtent.width@ (as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) ----- -   @extent.height@ /must/ be less than or equal to---     @imageCreateMaxExtent.height@ (as defined in+-- -   #VUID-VkImageCreateInfo-extent-02253# @extent.height@ /must/ be less+--     than or equal to @imageCreateMaxExtent.height@ (as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) ----- -   @extent.depth@ /must/ be less than or equal to---     @imageCreateMaxExtent.depth@ (as defined in+-- -   #VUID-VkImageCreateInfo-extent-02254# @extent.depth@ /must/ be less+--     than or equal to @imageCreateMaxExtent.depth@ (as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) ----- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and---     @flags@ contains+-- -   #VUID-VkImageCreateInfo-imageType-00954# If @imageType@ is+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT', --     @extent.width@ and @extent.height@ /must/ be equal and @arrayLayers@ --     /must/ be greater than or equal to 6 ----- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D',---     both @extent.height@ and @extent.depth@ /must/ be @1@+-- -   #VUID-VkImageCreateInfo-imageType-00956# If @imageType@ is+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', both @extent.height@+--     and @extent.depth@ /must/ be @1@ ----- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D',---     @extent.depth@ /must/ be @1@+-- -   #VUID-VkImageCreateInfo-imageType-00957# If @imageType@ is+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', @extent.depth@ /must/+--     be @1@ ----- -   @mipLevels@ /must/ be less than or equal to the number of levels in---     the complete mipmap chain based on @extent.width@, @extent.height@,---     and @extent.depth@+-- -   #VUID-VkImageCreateInfo-mipLevels-00958# @mipLevels@ /must/ be less+--     than or equal to the number of levels in the complete mipmap chain+--     based on @extent.width@, @extent.height@, and @extent.depth@ ----- -   @mipLevels@ /must/ be less than or equal to---     @imageCreateMaxMipLevels@ (as defined in+-- -   #VUID-VkImageCreateInfo-mipLevels-02255# @mipLevels@ /must/ be less+--     than or equal to @imageCreateMaxMipLevels@ (as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) ----- -   @arrayLayers@ /must/ be less than or equal to---     @imageCreateMaxArrayLayers@ (as defined in+-- -   #VUID-VkImageCreateInfo-arrayLayers-02256# @arrayLayers@ /must/ be+--     less than or equal to @imageCreateMaxArrayLayers@ (as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) ----- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',---     @arrayLayers@ /must/ be @1@+-- -   #VUID-VkImageCreateInfo-imageType-00961# If @imageType@ is+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', @arrayLayers@ /must/+--     be @1@ ----- -   If @samples@ is not+-- -   #VUID-VkImageCreateInfo-samples-02257# If @samples@ is not --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT', then --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', --     @flags@ /must/ not contain@@ -810,12 +837,12 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) --     /must/ be @false@, ----- -   If @samples@ is not+-- -   #VUID-VkImageCreateInfo-samples-02558# If @samples@ is not --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT', --     @usage@ /must/ not contain --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT' ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-usage-00963# If @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT', --     then bits other than --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',@@ -824,7 +851,7 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' --     /must/ not be set ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-usage-00964# If @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT', --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT', --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',@@ -833,7 +860,7 @@ --     @extent.width@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@ ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-usage-00965# If @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT', --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT', --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT',@@ -842,17 +869,17 @@ --     @extent.height@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@ ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-usage-02559# If @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT', --     @extent.width@ /must/ be less than or equal to --     \(\left\lceil{\frac{maxFramebufferWidth}{minFragmentDensityTexelSize_{width}}}\right\rceil\) ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-usage-02560# If @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT', --     @extent.height@ /must/ be less than or equal to --     \(\left\lceil{\frac{maxFramebufferHeight}{minFragmentDensityTexelSize_{height}}}\right\rceil\) ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-usage-00966# If @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT', --     @usage@ /must/ also contain at least one of --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT',@@ -860,51 +887,52 @@ --     or --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' ----- -   @samples@ /must/ be a bit value that is set in---     @imageCreateSampleCounts@ (as defined in+-- -   #VUID-VkImageCreateInfo-samples-02258# @samples@ /must/ be a bit+--     value that is set in @imageCreateSampleCounts@ (as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) ----- -   If the+-- -   #VUID-VkImageCreateInfo-usage-00968# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderStorageImageMultisample multisampled storage images> --     feature is not enabled, and @usage@ contains --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT', --     @samples@ /must/ be --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If the+-- -   #VUID-VkImageCreateInfo-flags-00969# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseBinding sparse bindings> --     feature is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT' ----- -   If the+-- -   #VUID-VkImageCreateInfo-flags-01924# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency> --     feature is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT' ----- -   If @tiling@ is+-- -   #VUID-VkImageCreateInfo-tiling-04121# If @tiling@ is --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR', @flags@ --     /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D',---     @flags@ /must/ not contain+-- -   #VUID-VkImageCreateInfo-imageType-00970# If @imageType@ is+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', @flags@ /must/ not+--     contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If the+-- -   #VUID-VkImageCreateInfo-imageType-00971# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyImage2D sparse residency for 2D images> --     feature is not enabled, and @imageType@ is --     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', @flags@ /must/ not --     contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If the+-- -   #VUID-VkImageCreateInfo-imageType-00972# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyImage3D sparse residency for 3D images> --     feature is not enabled, and @imageType@ is --     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', @flags@ /must/ not --     contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If the+-- -   #VUID-VkImageCreateInfo-imageType-00973# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency2Samples sparse residency for images with 2 samples> --     feature is not enabled, @imageType@ is --     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @samples@ is@@ -912,7 +940,7 @@ --     @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If the+-- -   #VUID-VkImageCreateInfo-imageType-00974# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency4Samples sparse residency for images with 4 samples> --     feature is not enabled, @imageType@ is --     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @samples@ is@@ -920,7 +948,7 @@ --     @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If the+-- -   #VUID-VkImageCreateInfo-imageType-00975# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency8Samples sparse residency for images with 8 samples> --     feature is not enabled, @imageType@ is --     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @samples@ is@@ -928,7 +956,7 @@ --     @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If the+-- -   #VUID-VkImageCreateInfo-imageType-00976# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidency16Samples sparse residency for images with 16 samples> --     feature is not enabled, @imageType@ is --     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @samples@ is@@ -936,14 +964,14 @@ --     @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-00987# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' --     or --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT', --     it /must/ also contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT' ----- -   If any of the bits+-- -   #VUID-VkImageCreateInfo-None-01925# If any of the bits --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT', --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT', --     or@@ -952,11 +980,11 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT' --     /must/ not also be set ----- -   If the protected memory feature is not enabled, @flags@ /must/ not---     contain+-- -   #VUID-VkImageCreateInfo-flags-01890# If the protected memory feature+--     is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT' ----- -   If any of the bits+-- -   #VUID-VkImageCreateInfo-None-01891# If any of the bits --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT', --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT', --     or@@ -965,13 +993,13 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT' --     /must/ not also be set ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-00988# If the @pNext@ chain includes a --     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV' --     structure, it /must/ not contain a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo' --     structure ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-00990# If the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo' --     structure, its @handleTypes@ member /must/ only contain bits that --     are also in@@ -985,7 +1013,7 @@ --     to any one of the handle types specified in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-00991# If the @pNext@ chain includes a --     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV' --     structure, its @handleTypes@ member /must/ only contain bits that --     are also in@@ -997,12 +1025,13 @@ --     one of the handle types specified in --     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV'::@handleTypes@ ----- -   If the logical device was created with+-- -   #VUID-VkImageCreateInfo-physicalDeviceCount-01421# If the logical+--     device was created with --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo'::@physicalDeviceCount@ --     equal to 1, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02259# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT', --     then @mipLevels@ /must/ be one, @arrayLayers@ /must/ be one, --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'.@@ -1010,7 +1039,7 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) --     /must/ be @false@ ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-01572# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT', --     then @format@ /must/ be a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-bc block-compressed image format>,@@ -1019,55 +1048,60 @@ --     or an --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-astc ASTC compressed image format> ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-01573# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT', --     then @flags@ /must/ also contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT' ----- -   @initialLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or+-- -   #VUID-VkImageCreateInfo-initialLayout-00993# @initialLayout@ /must/+--     be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED' ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-01443# If the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo' --     or --     'Vulkan.Extensions.VK_NV_external_memory.ExternalMemoryImageCreateInfoNV' --     structure whose @handleTypes@ member is not @0@, @initialLayout@ --     /must/ be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' ----- -   If the image @format@ is one of those listed in+-- -   #VUID-VkImageCreateInfo-format-02561# If the image @format@ is one+--     of those listed in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>, --     then @mipLevels@ /must/ be 1 ----- -   If the image @format@ is one of those listed in+-- -   #VUID-VkImageCreateInfo-format-02562# If the image @format@ is one+--     of those listed in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>, --     @samples@ /must/ be --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If the image @format@ is one of those listed in+-- -   #VUID-VkImageCreateInfo-format-02563# If the image @format@ is one+--     of those listed in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>, --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' ----- -   If the image @format@ is one of those listed in+-- -   #VUID-VkImageCreateInfo-format-02653# If the image @format@ is one+--     of those listed in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion>, --     and the @ycbcrImageArrays@ feature is not enabled, @arrayLayers@ --     /must/ be 1 ----- -   If @format@ is a /multi-planar/ format, and if---     @imageCreateFormatFeatures@ (as defined in+-- -   #VUID-VkImageCreateInfo-imageCreateFormatFeatures-02260# If @format@+--     is a /multi-planar/ format, and if @imageCreateFormatFeatures@ (as+--     defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-creation-limits Image Creation Limits>) --     does not contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DISJOINT_BIT', --     then @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' ----- -   If @format@ is not a /multi-planar/ format, and @flags@ does not---     include+-- -   #VUID-VkImageCreateInfo-format-01577# If @format@ is not a+--     /multi-planar/ format, and @flags@ does not include --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_ALIAS_BIT', --     @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' ----- -   If @tiling@ is+-- -   #VUID-VkImageCreateInfo-tiling-02261# If @tiling@ is --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT', --     then the @pNext@ chain /must/ include exactly one of --     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT'@@ -1075,14 +1109,14 @@ --     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT' --     structures ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-02262# If the @pNext@ chain includes a --     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierListCreateInfoEXT' --     or --     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierExplicitCreateInfoEXT' --     structure, then @tiling@ /must/ be --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT' ----- -   If @tiling@ is+-- -   #VUID-VkImageCreateInfo-tiling-02353# If @tiling@ is --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT' --     and @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',@@ -1090,17 +1124,17 @@ --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo' --     structure with non-zero @viewFormatCount@ ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-01533# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' --     @format@ /must/ be a depth or depth\/stencil format ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-02393# If the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo' --     structure whose @handleTypes@ member includes --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID', --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-02394# If the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo' --     structure whose @handleTypes@ member includes --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID',@@ -1108,24 +1142,25 @@ --     the complete mipmap chain based on @extent.width@, @extent.height@, --     and @extent.depth@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-02396# If the @pNext@ chain includes a --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID' --     structure whose @externalFormat@ member is not @0@, @flags@ /must/ --     not include --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT' ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-02397# If the @pNext@ chain includes a --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID' --     structure whose @externalFormat@ member is not @0@, @usage@ /must/ --     not include any usages except --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageCreateInfo-pNext-02398# If the @pNext@ chain includes a --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID' --     structure whose @externalFormat@ member is not @0@, @tiling@ /must/ --     be 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL' ----- -   If @format@ is a depth-stencil format, @usage@ includes+-- -   #VUID-VkImageCreateInfo-format-02795# If @format@ is a depth-stencil+--     format, @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT', --     and the @pNext@ chain includes a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'@@ -1134,7 +1169,8 @@ --     member /must/ also include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If @format@ is a depth-stencil format, @usage@ does not include+-- -   #VUID-VkImageCreateInfo-format-02796# If @format@ is a depth-stencil+--     format, @usage@ does not include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT', --     and the @pNext@ chain includes a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'@@ -1143,7 +1179,8 @@ --     member /must/ also not include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If @format@ is a depth-stencil format, @usage@ includes+-- -   #VUID-VkImageCreateInfo-format-02797# If @format@ is a depth-stencil+--     format, @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT', --     and the @pNext@ chain includes a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'@@ -1152,7 +1189,8 @@ --     member /must/ also include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT' ----- -   If @format@ is a depth-stencil format, @usage@ does not include+-- -   #VUID-VkImageCreateInfo-format-02798# If @format@ is a depth-stencil+--     format, @usage@ does not include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT', --     and the @pNext@ chain includes a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'@@ -1161,7 +1199,8 @@ --     member /must/ also not include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT' ----- -   If 'Vulkan.Core10.Enums.Format.Format' is a depth-stencil format and+-- -   #VUID-VkImageCreateInfo-Format-02536# If+--     'Vulkan.Core10.Enums.Format.Format' is a depth-stencil format and --     the @pNext@ chain includes a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo' --     structure with its @stencilUsage@ member including@@ -1169,15 +1208,15 @@ --     @extent.width@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@ ----- -   If @format@ is a depth-stencil format and the @pNext@ chain includes---     a+-- -   #VUID-VkImageCreateInfo-format-02537# If @format@ is a depth-stencil+--     format and the @pNext@ chain includes a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo' --     structure with its @stencilUsage@ member including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT', --     @extent.height@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@ ----- -   If the+-- -   #VUID-VkImageCreateInfo-format-02538# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderStorageImageMultisample multisampled storage images> --     feature is not enabled, @format@ is a depth-stencil format and the --     @pNext@ chain includes a@@ -1187,67 +1226,69 @@ --     @samples@ /must/ be --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02050# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV', --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' --     or 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02051# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV', --     it /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT' --     and the @format@ /must/ not be a depth\/stencil format ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02052# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     and @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', --     @extent.width@ and @extent.height@ /must/ be greater than @1@ ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02053# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     and @imageType@ is 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', --     @extent.width@, @extent.height@, and @extent.depth@ /must/ be --     greater than @1@ ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-imageType-02082# If @usage@ includes --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR', --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-samples-02083# If @usage@ includes --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR', --     @samples@ /must/ be --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If @usage@ includes+-- -   #VUID-VkImageCreateInfo-tiling-02084# If @usage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV', --     @tiling@ /must/ be --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02565# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT', --     @tiling@ /must/ be --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02566# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT', --     @imageType@ /must/ be 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02567# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT', --     @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT' ----- -   If @flags@ contains+-- -   #VUID-VkImageCreateInfo-flags-02568# If @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT', --     @mipLevels@ /must/ be @1@ ----- -   If the @VK_KHR_portability_subset@ extension is enabled, and+-- -   #VUID-VkImageCreateInfo-imageView2DOn3DImage-04459# If the+--     @VK_KHR_portability_subset@ extension is enabled, and --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@imageView2DOn3DImage@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE', @flags@ /must/ not --     contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'. ----- -   If the @VK_KHR_portability_subset@ extension is enabled, and+-- -   #VUID-VkImageCreateInfo-multisampleArrayImage-04460# If the+--     @VK_KHR_portability_subset@ extension is enabled, and --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@multisampleArrayImage@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE', and @samples@ is not --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT', then@@ -1255,12 +1296,12 @@ -- -- = Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_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+-- -   #VUID-VkImageCreateInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV', --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID', --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo',@@ -1271,33 +1312,39 @@ --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo', --     or 'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkImageCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkImageCreateInfo-flags-parameter# @flags@ /must/ be a valid+--     combination of --     'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values ----- -   @imageType@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageType.ImageType' value+-- -   #VUID-VkImageCreateInfo-imageType-parameter# @imageType@ /must/ be a+--     valid 'Vulkan.Core10.Enums.ImageType.ImageType' value ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-VkImageCreateInfo-format-parameter# @format@ /must/ be a valid+--     'Vulkan.Core10.Enums.Format.Format' value ----- -   @samples@ /must/ be a valid---     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value+-- -   #VUID-VkImageCreateInfo-samples-parameter# @samples@ /must/ be a+--     valid 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'+--     value ----- -   @tiling@ /must/ be a valid+-- -   #VUID-VkImageCreateInfo-tiling-parameter# @tiling@ /must/ be a valid --     'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value ----- -   @usage@ /must/ be a valid combination of+-- -   #VUID-VkImageCreateInfo-usage-parameter# @usage@ /must/ be a valid+--     combination of --     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values ----- -   @usage@ /must/ not be @0@+-- -   #VUID-VkImageCreateInfo-usage-requiredbitmask# @usage@ /must/ not be+--     @0@ ----- -   @sharingMode@ /must/ be a valid---     'Vulkan.Core10.Enums.SharingMode.SharingMode' value+-- -   #VUID-VkImageCreateInfo-sharingMode-parameter# @sharingMode@ /must/+--     be a valid 'Vulkan.Core10.Enums.SharingMode.SharingMode' value ----- -   @initialLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+-- -   #VUID-VkImageCreateInfo-initialLayout-parameter# @initialLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value -- -- \<\/section> -- = See Also
src/Vulkan/Core10/ImageView.hs view
@@ -97,17 +97,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateImageView-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'ImageViewCreateInfo' structure+-- -   #VUID-vkCreateImageView-pCreateInfo-parameter# @pCreateInfo@ /must/+--     be a valid pointer to a valid 'ImageViewCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateImageView-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pView@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.ImageView' handle+-- -   #VUID-vkCreateImageView-pView-parameter# @pView@ /must/ be a valid+--     pointer to a 'Vulkan.Core10.Handles.ImageView' handle -- -- == Return Codes --@@ -178,30 +179,34 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @imageView@ /must/ have---     completed execution+-- -   #VUID-vkDestroyImageView-imageView-01026# All submitted commands+--     that refer to @imageView@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyImageView-imageView-01027# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @imageView@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyImageView-imageView-01028# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @imageView@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyImageView-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'---     handle+-- -   #VUID-vkDestroyImageView-imageView-parameter# If @imageView@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @imageView@ /must/ be a+--     valid 'Vulkan.Core10.Handles.ImageView' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyImageView-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @imageView@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyImageView-imageView-parent# If @imageView@ is a valid+--     handle, it /must/ have been created, allocated, or retrieved from+--     @device@ -- -- == Host Synchronization --@@ -249,28 +254,28 @@     -- specifying the component value placed in the R component of the output     -- vector.     ---    -- @r@ /must/ be a valid+    -- #VUID-VkComponentMapping-r-parameter# @r@ /must/ be a valid     -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value     r :: ComponentSwizzle   , -- | @g@ is a 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle'     -- specifying the component value placed in the G component of the output     -- vector.     ---    -- @g@ /must/ be a valid+    -- #VUID-VkComponentMapping-g-parameter# @g@ /must/ be a valid     -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value     g :: ComponentSwizzle   , -- | @b@ is a 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle'     -- specifying the component value placed in the B component of the output     -- vector.     ---    -- @b@ /must/ be a valid+    -- #VUID-VkComponentMapping-b-parameter# @b@ /must/ be a valid     -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value     b :: ComponentSwizzle   , -- | @a@ is a 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle'     -- specifying the component value placed in the A component of the output     -- vector.     ---    -- @a@ /must/ be a valid+    -- #VUID-VkComponentMapping-a-parameter# @a@ /must/ be a valid     -- 'Vulkan.Core10.Enums.ComponentSwizzle.ComponentSwizzle' value     a :: ComponentSwizzle   }@@ -397,15 +402,16 @@ -- -- == Valid Usage ----- -   If @levelCount@ is not---     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', it /must/ be+-- -   #VUID-VkImageSubresourceRange-levelCount-01720# If @levelCount@ is+--     not 'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', it /must/ be --     greater than @0@ ----- -   If @layerCount@ is not---     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', it /must/ be---     greater than @0@+-- -   #VUID-VkImageSubresourceRange-layerCount-01721# If @layerCount@ is+--     not 'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', it /must/+--     be greater than @0@ ----- -   If @aspectMask@ includes+-- -   #VUID-VkImageSubresourceRange-aspectMask-01670# If @aspectMask@+--     includes --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT', --     then it /must/ not include any of --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',@@ -413,15 +419,18 @@ --     or --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' ----- -   @aspectMask@ /must/ not include---     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@+-- -   #VUID-VkImageSubresourceRange-aspectMask-02278# @aspectMask@ /must/+--     not include @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index+--     @i@ -- -- == Valid Usage (Implicit) ----- -   @aspectMask@ /must/ be a valid combination of+-- -   #VUID-VkImageSubresourceRange-aspectMask-parameter# @aspectMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values ----- -   @aspectMask@ /must/ not be @0@+-- -   #VUID-VkImageSubresourceRange-aspectMask-requiredbitmask#+--     @aspectMask@ /must/ not be @0@ -- -- = See Also --@@ -737,62 +746,64 @@ -- -- == Valid Usage ----- -   If @image@ was not created with+-- -   #VUID-VkImageViewCreateInfo-image-01003# If @image@ was not created+--     with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CUBE_COMPATIBLE_BIT' --     then @viewType@ /must/ not be --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' or --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' ----- -   If the+-- -   #VUID-VkImageViewCreateInfo-viewType-01004# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-imageCubeArray image cubemap arrays> --     feature is not enabled, @viewType@ /must/ not be --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' ----- -   If @image@ was created with+-- -   #VUID-VkImageViewCreateInfo-image-01005# If @image@ was created with --     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D' but without --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' --     set then @viewType@ /must/ not be --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' ----- -   @image@ /must/ have been created with a @usage@ value containing at---     least one of the usages defined in the+-- -   #VUID-VkImageViewCreateInfo-image-04441# @image@ /must/ have been+--     created with a @usage@ value containing at least one of the usages+--     defined in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#valid-imageview-imageusage valid image usage> --     list for image views ----- -   The+-- -   #VUID-VkImageViewCreateInfo-None-02273# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     of the resultant image view /must/ contain at least one bit ----- -   If @usage@ contains+-- -   #VUID-VkImageViewCreateInfo-usage-02274# If @usage@ contains --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', --     then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     of the resultant image view /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT' ----- -   If @usage@ contains+-- -   #VUID-VkImageViewCreateInfo-usage-02275# If @usage@ contains --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_STORAGE_BIT', --     then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_BIT' ----- -   If @usage@ contains+-- -   #VUID-VkImageViewCreateInfo-usage-02276# If @usage@ contains --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT', --     then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' ----- -   If @usage@ contains+-- -   #VUID-VkImageViewCreateInfo-usage-02277# If @usage@ contains --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT', --     then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If @usage@ contains+-- -   #VUID-VkImageViewCreateInfo-usage-02652# If @usage@ contains --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT', --     then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>@@ -801,21 +812,25 @@ --     or --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@+-- -   #VUID-VkImageViewCreateInfo-subresourceRange-01478#+--     @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@ --     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was --     created ----- -   If @subresourceRange.levelCount@ is not+-- -   #VUID-VkImageViewCreateInfo-subresourceRange-01718# If+--     @subresourceRange.levelCount@ is not --     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', --     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@ --     /must/ be less than or equal to the @mipLevels@ specified in --     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created ----- -   If @image@ was created with @usage@ containing+-- -   #VUID-VkImageViewCreateInfo-image-02571# If @image@ was created with+--     @usage@ containing --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT', --     @subresourceRange.levelCount@ /must/ be @1@ ----- -   If @image@ is not a 3D image created with+-- -   #VUID-VkImageViewCreateInfo-image-01482# If @image@ is not a 3D+--     image created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' --     set, or @viewType@ is not --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or@@ -824,7 +839,8 @@ --     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo' --     when @image@ was created ----- -   If @subresourceRange.layerCount@ is not+-- -   #VUID-VkImageViewCreateInfo-subresourceRange-01483# If+--     @subresourceRange.layerCount@ is not --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', @image@ is not --     a 3D image created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'@@ -836,7 +852,8 @@ --     /must/ be less than or equal to the @arrayLayers@ specified in --     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created ----- -   If @image@ is a 3D image created with+-- -   #VUID-VkImageViewCreateInfo-image-02724# If @image@ is a 3D image+--     created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT' --     set, and @viewType@ is --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or@@ -847,7 +864,8 @@ --     according to the formula defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-miplevel-sizing Image Miplevel Sizing> ----- -   If @subresourceRange.layerCount@ is not+-- -   #VUID-VkImageViewCreateInfo-subresourceRange-02725# If+--     @subresourceRange.layerCount@ is not --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', @image@ is a 3D --     image created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'@@ -862,7 +880,8 @@ --     according to the formula defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-miplevel-sizing Image Miplevel Sizing> ----- -   If @image@ was created with the+-- -   #VUID-VkImageViewCreateInfo-image-01761# If @image@ was created with+--     the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT' --     flag, but without the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT'@@ -872,18 +891,20 @@ --     create @image@, as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility-classes Format Compatibility Classes> ----- -   If @image@ was created with the+-- -   #VUID-VkImageViewCreateInfo-image-01583# If @image@ was created with+--     the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT' --     flag, @format@ /must/ be compatible with, or /must/ be an --     uncompressed format that is size-compatible with, the @format@ used --     to create @image@ ----- -   If @image@ was created with the+-- -   #VUID-VkImageViewCreateInfo-image-01584# If @image@ was created with+--     the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT' --     flag, the @levelCount@ and @layerCount@ members of --     @subresourceRange@ /must/ both be @1@ ----- -   If a+-- -   #VUID-VkImageViewCreateInfo-pNext-01585# If a --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo' --     structure was included in the @pNext@ chain of the --     'Vulkan.Core10.Image.ImageCreateInfo' structure used when creating@@ -892,7 +913,7 @@ --     is not zero then @format@ /must/ be one of the formats in --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@pViewFormats@ ----- -   If a+-- -   #VUID-VkImageViewCreateInfo-pNext-04082# If a --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo' --     structure was included in the @pNext@ chain of the --     'Vulkan.Core10.Image.ImageCreateInfo' structure used when creating@@ -903,7 +924,7 @@ --     /must/ be compatible with the @format@ as described in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility compatibility table> ----- -   If @flags@ does not contain+-- -   #VUID-VkImageViewCreateInfo-flags-04083# If @flags@ does not contain --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT' --     and the @pNext@ chain include a --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'@@ -911,7 +932,8 @@ --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@viewFormatCount@ --     /must/ be @0@ or @1@ ----- -   If @image@ was created with the+-- -   #VUID-VkImageViewCreateInfo-image-01586# If @image@ was created with+--     the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT' --     flag, if the @format@ of the @image@ is a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>@@ -925,7 +947,8 @@ --     @format@ indicated by @subresourceRange.aspectMask@, as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes> ----- -   If @image@ was not created with the+-- -   #VUID-VkImageViewCreateInfo-image-01762# If @image@ was not created+--     with the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT' --     flag, or if the @format@ of the @image@ is a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar>@@ -933,83 +956,91 @@ --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT', --     @format@ /must/ be identical to the @format@ used to create @image@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageViewCreateInfo-pNext-01970# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo' --     structure with a @conversion@ value other than --     'Vulkan.Core10.APIConstants.NULL_HANDLE', all members of --     @components@ /must/ have the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle> ----- -   If @image@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkImageViewCreateInfo-image-01020# If @image@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @subresourceRange@ and @viewType@ /must/ be compatible with the+-- -   #VUID-VkImageViewCreateInfo-subResourceRange-01021#+--     @subresourceRange@ and @viewType@ /must/ be compatible with the --     image, as described in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-compatibility compatibility table> ----- -   If @image@ has an+-- -   #VUID-VkImageViewCreateInfo-image-02399# If @image@ has an --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>, --     @format@ /must/ be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' ----- -   If @image@ has an+-- -   #VUID-VkImageViewCreateInfo-image-02400# If @image@ has an --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>, --     the @pNext@ chain /must/ include a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo' --     structure with a @conversion@ object created with the same external --     format as @image@ ----- -   If @image@ has an+-- -   #VUID-VkImageViewCreateInfo-image-02401# If @image@ has an --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats external format>, --     all members of @components@ /must/ be the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle> ----- -   If @image@ was created with @usage@ containing+-- -   #VUID-VkImageViewCreateInfo-image-02086# If @image@ was created with+--     @usage@ containing --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR', --     @viewType@ /must/ be --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' ----- -   If @image@ was created with @usage@ containing+-- -   #VUID-VkImageViewCreateInfo-image-02087# If @image@ was created with+--     @usage@ containing --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV', --     @format@ /must/ be 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT' ----- -   If the @usage@ for the image view includes+-- -   #VUID-VkImageViewCreateInfo-usage-04550# If the @usage@ for the+--     image view includes --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR', --     then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' ----- -   If the @usage@ for the image view includes+-- -   #VUID-VkImageViewCreateInfo-usage-04551# If the @usage@ for the+--     image view includes --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' --     and --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-layeredShadingRateAttachments layeredShadingRateAttachments> --     is 'Vulkan.Core10.FundamentalTypes.FALSE', --     @subresourceRange.layerCount@ /must/ be @1@ ----- -   If+-- -   #VUID-VkImageViewCreateInfo-flags-02572# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMapDynamic dynamic fragment density map> --     feature is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT' ----- -   If+-- -   #VUID-VkImageViewCreateInfo-flags-03567# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMapDeferred deferred fragment density map> --     feature is not enabled, @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT' ----- -   If @flags@ contains+-- -   #VUID-VkImageViewCreateInfo-flags-03568# If @flags@ contains --     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT', --     @flags@ /must/ not contain --     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT' ----- -   If @image@ was created with @flags@ containing+-- -   #VUID-VkImageViewCreateInfo-image-03569# If @image@ was created with+--     @flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT' --     and @usage@ containing --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT', --     @subresourceRange.layerCount@ /must/ be less than or equal to --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxSubsampledArrayLayers ::maxSubsampledArrayLayers> ----- -   If @flags@ does not contain+-- -   #VUID-VkImageViewCreateInfo-flags-04116# If @flags@ does not contain --     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT' --     and @image@ was created with @usage@ containing --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT',@@ -1020,7 +1051,8 @@ --     or --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_ALIASED_BIT' ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageViewCreateInfo-pNext-02662# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo' --     structure, and @image@ was not created with a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'@@ -1030,7 +1062,8 @@ --     'Vulkan.Core10.Image.ImageCreateInfo' structure used to create --     @image@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageViewCreateInfo-pNext-02663# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo' --     structure, @image@ was created with a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'@@ -1045,7 +1078,8 @@ --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo' --     structure used to create @image@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkImageViewCreateInfo-pNext-02664# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo' --     structure, @image@ was created with a --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo'@@ -1059,37 +1093,39 @@ --     @usage@ member of the 'Vulkan.Core10.Image.ImageCreateInfo' --     structure used to create @image@ ----- -   If @viewType@ is+-- -   #VUID-VkImageViewCreateInfo-viewType-02960# If @viewType@ is --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' and --     @subresourceRange.layerCount@ is not --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', --     @subresourceRange.layerCount@ /must/ be @6@ ----- -   If @viewType@ is+-- -   #VUID-VkImageViewCreateInfo-viewType-02961# If @viewType@ is --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' and --     @subresourceRange.layerCount@ is not --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', --     @subresourceRange.layerCount@ /must/ be a multiple of @6@ ----- -   If @viewType@ is+-- -   #VUID-VkImageViewCreateInfo-viewType-02962# If @viewType@ is --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE' and --     @subresourceRange.layerCount@ is --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', the remaining --     number of layers /must/ be @6@ ----- -   If @viewType@ is+-- -   #VUID-VkImageViewCreateInfo-viewType-02963# If @viewType@ is --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY' and --     @subresourceRange.layerCount@ is --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', the remaining --     number of layers /must/ be a multiple of @6@ ----- -   If the @VK_KHR_portability_subset@ extension is enabled, and+-- -   #VUID-VkImageViewCreateInfo-imageViewFormatSwizzle-04465# If the+--     @VK_KHR_portability_subset@ extension is enabled, and --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@imageViewFormatSwizzle@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE', all elements of --     @components@ /must/ be --     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_IDENTITY'. ----- -   If the @VK_KHR_portability_subset@ extension is enabled, and+-- -   #VUID-VkImageViewCreateInfo-imageViewFormatReinterpretation-04466#+--     If the @VK_KHR_portability_subset@ extension is enabled, and --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@imageViewFormatReinterpretation@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE', the --     'Vulkan.Core10.Enums.Format.Format' in @format@ /must/ not contain a@@ -1099,34 +1135,39 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageViewCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_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+-- -   #VUID-VkImageViewCreateInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_EXT_astc_decode_mode.ImageViewASTCDecodeModeEXT', --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.ImageViewUsageCreateInfo', --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkImageViewCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkImageViewCreateInfo-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.ImageViewCreateFlagBits.ImageViewCreateFlagBits' --     values ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-VkImageViewCreateInfo-image-parameter# @image@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle ----- -   @viewType@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' value+-- -   #VUID-VkImageViewCreateInfo-viewType-parameter# @viewType@ /must/ be+--     a valid 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' value ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-VkImageViewCreateInfo-format-parameter# @format@ /must/ be a+--     valid 'Vulkan.Core10.Enums.Format.Format' value ----- -   @components@ /must/ be a valid 'ComponentMapping' structure+-- -   #VUID-VkImageViewCreateInfo-components-parameter# @components@+--     /must/ be a valid 'ComponentMapping' structure ----- -   @subresourceRange@ /must/ be a valid 'ImageSubresourceRange'+-- -   #VUID-VkImageViewCreateInfo-subresourceRange-parameter#+--     @subresourceRange@ /must/ be a valid 'ImageSubresourceRange' --     structure -- -- = See Also
src/Vulkan/Core10/LayerDiscovery.hs view
@@ -94,9 +94,11 @@ -- -- == Valid Usage (Implicit) ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkEnumerateInstanceLayerProperties-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkEnumerateInstanceLayerProperties-pProperties-parameter# If+--     the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'LayerProperties' structures --@@ -170,14 +172,17 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkEnumerateDeviceLayerProperties-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and---     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer---     to an array of @pPropertyCount@ 'LayerProperties' structures+-- -   #VUID-vkEnumerateDeviceLayerProperties-pProperties-parameter# If the+--     value referenced by @pPropertyCount@ is not @0@, and @pProperties@+--     is not @NULL@, @pProperties@ /must/ be a valid pointer to an array+--     of @pPropertyCount@ 'LayerProperties' structures -- -- == Return Codes --
src/Vulkan/Core10/Memory.hs view
@@ -164,7 +164,8 @@ -- -- == Valid Usage ----- -   @pAllocateInfo->allocationSize@ /must/ be less than or equal to+-- -   #VUID-vkAllocateMemory-pAllocateInfo-01713#+--     @pAllocateInfo->allocationSize@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryHeaps@[memindex].size --     where @memindex@ = --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryTypes@[pAllocateInfo->memoryTypeIndex].heapIndex@@ -173,36 +174,39 @@ --     for the 'Vulkan.Core10.Handles.PhysicalDevice' that @device@ was --     created from ----- -   @pAllocateInfo->memoryTypeIndex@ /must/ be less than+-- -   #VUID-vkAllocateMemory-pAllocateInfo-01714#+--     @pAllocateInfo->memoryTypeIndex@ /must/ be less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'::@memoryTypeCount@ --     as returned by --     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceMemoryProperties' --     for the 'Vulkan.Core10.Handles.PhysicalDevice' that @device@ was --     created from ----- -   If the+-- -   #VUID-vkAllocateMemory-deviceCoherentMemory-02790# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceCoherentMemory deviceCoherentMemory> --     feature is not enabled, @pAllocateInfo->memoryTypeIndex@ /must/ not --     identify a memory type supporting --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD' ----- -   There /must/ be less than+-- -   #VUID-vkAllocateMemory-maxMemoryAllocationCount-04101# There /must/+--     be less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxMemoryAllocationCount@ --     device memory allocations currently allocated on the device. -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkAllocateMemory-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pAllocateInfo@ /must/ be a valid pointer to a valid---     'MemoryAllocateInfo' structure+-- -   #VUID-vkAllocateMemory-pAllocateInfo-parameter# @pAllocateInfo@+--     /must/ be a valid pointer to a valid 'MemoryAllocateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkAllocateMemory-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pMemory@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.DeviceMemory' handle+-- -   #VUID-vkAllocateMemory-pMemory-parameter# @pMemory@ /must/ be a+--     valid pointer to a 'Vulkan.Core10.Handles.DeviceMemory' handle -- -- == Return Codes --@@ -308,23 +312,24 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @memory@ (via images or---     buffers) /must/ have completed execution+-- -   #VUID-vkFreeMemory-memory-00677# All submitted commands that refer+--     to @memory@ (via images or buffers) /must/ have completed execution -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkFreeMemory-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-vkFreeMemory-memory-parameter# If @memory@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ /must/ be a valid+--     'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkFreeMemory-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @memory@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkFreeMemory-memory-parent# If @memory@ is a valid handle, it+--     /must/ have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -416,35 +421,42 @@ -- -- == Valid Usage ----- -   @memory@ /must/ not be currently host mapped+-- -   #VUID-vkMapMemory-memory-00678# @memory@ /must/ not be currently+--     host mapped ----- -   @offset@ /must/ be less than the size of @memory@+-- -   #VUID-vkMapMemory-offset-00679# @offset@ /must/ be less than the+--     size of @memory@ ----- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @size@ /must/ be greater than @0@+-- -   #VUID-vkMapMemory-size-00680# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be greater+--     than @0@ ----- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @size@ /must/ be less than or equal to the size of the @memory@---     minus @offset@+-- -   #VUID-vkMapMemory-size-00681# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be less than+--     or equal to the size of the @memory@ minus @offset@ ----- -   @memory@ /must/ have been created with a memory type that reports+-- -   #VUID-vkMapMemory-memory-00682# @memory@ /must/ have been created+--     with a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_HOST_VISIBLE_BIT' ----- -   @memory@ /must/ not have been allocated with multiple instances+-- -   #VUID-vkMapMemory-memory-00683# @memory@ /must/ not have been+--     allocated with multiple instances -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkMapMemory-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-vkMapMemory-memory-parameter# @memory@ /must/ be a valid+--     'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   @flags@ /must/ be @0@+-- -   #VUID-vkMapMemory-flags-zerobitmask# @flags@ /must/ be @0@ ----- -   @ppData@ /must/ be a valid pointer to a pointer value+-- -   #VUID-vkMapMemory-ppData-parameter# @ppData@ /must/ be a valid+--     pointer to a pointer value ----- -   @memory@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkMapMemory-memory-parent# @memory@ /must/ have been created,+--     allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -522,17 +534,19 @@ -- -- == Valid Usage ----- -   @memory@ /must/ be currently host mapped+-- -   #VUID-vkUnmapMemory-memory-00689# @memory@ /must/ be currently host+--     mapped -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkUnmapMemory-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-vkUnmapMemory-memory-parameter# @memory@ /must/ be a valid+--     'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   @memory@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkUnmapMemory-memory-parent# @memory@ /must/ have been+--     created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -615,13 +629,15 @@                          . (MonadIO io)                         => -- | @device@ is the logical device that owns the memory ranges.                            ---                           -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                           -- #VUID-vkFlushMappedMemoryRanges-device-parameter# @device@ /must/ be a+                           -- valid 'Vulkan.Core10.Handles.Device' handle                            Device                         -> -- | @pMemoryRanges@ is a pointer to an array of 'MappedMemoryRange'                            -- structures describing the memory ranges to flush.                            ---                           -- @pMemoryRanges@ /must/ be a valid pointer to an array of-                           -- @memoryRangeCount@ valid 'MappedMemoryRange' structures+                           -- #VUID-vkFlushMappedMemoryRanges-pMemoryRanges-parameter# @pMemoryRanges@+                           -- /must/ be a valid pointer to an array of @memoryRangeCount@ valid+                           -- 'MappedMemoryRange' structures                            ("memoryRanges" ::: Vector MappedMemoryRange)                         -> io () flushMappedMemoryRanges device memoryRanges = liftIO . evalContT $ do@@ -685,11 +701,13 @@                               . (MonadIO io)                              => -- | @device@ is the logical device that owns the memory ranges.                                 ---                                -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                -- #VUID-vkInvalidateMappedMemoryRanges-device-parameter# @device@ /must/+                                -- be a valid 'Vulkan.Core10.Handles.Device' handle                                 Device                              -> -- | @pMemoryRanges@ is a pointer to an array of 'MappedMemoryRange'                                 -- structures describing the memory ranges to invalidate.                                 --+                                -- #VUID-vkInvalidateMappedMemoryRanges-pMemoryRanges-parameter#                                 -- @pMemoryRanges@ /must/ be a valid pointer to an array of                                 -- @memoryRangeCount@ valid 'MappedMemoryRange' structures                                 ("memoryRanges" ::: Vector MappedMemoryRange)@@ -734,16 +752,20 @@                            . (MonadIO io)                           => -- | @device@ is the logical device that owns the memory.                              ---                             -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                             -- #VUID-vkGetDeviceMemoryCommitment-device-parameter# @device@ /must/ be a+                             -- valid 'Vulkan.Core10.Handles.Device' handle                              Device                           -> -- | @memory@ is the memory object being queried.                              ---                             -- @memory@ /must/ have been created with a memory type that reports+                             -- #VUID-vkGetDeviceMemoryCommitment-memory-00690# @memory@ /must/ have+                             -- been created with a memory type that reports                              -- 'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT'                              ---                             -- @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle+                             -- #VUID-vkGetDeviceMemoryCommitment-memory-parameter# @memory@ /must/ be a+                             -- valid 'Vulkan.Core10.Handles.DeviceMemory' handle                              ---                             -- @memory@ /must/ have been created, allocated, or retrieved from @device@+                             -- #VUID-vkGetDeviceMemoryCommitment-memory-parent# @memory@ /must/ have+                             -- been created, allocated, or retrieved from @device@                              DeviceMemory                           -> io (("committedMemoryInBytes" ::: DeviceSize)) getDeviceMemoryCommitment device memory = liftIO . evalContT $ do@@ -832,7 +854,8 @@ -- -- == Valid Usage ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-00639# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo' --     structure, and any of the handle types specified in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@@@ -849,7 +872,8 @@ --     structure with either its @image@ or @buffer@ member set to a value --     other than 'Vulkan.Core10.APIConstants.NULL_HANDLE'. ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-00640# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo' --     structure, it /must/ not include a --     'Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV'@@ -857,92 +881,101 @@ --     'Vulkan.Extensions.VK_NV_external_memory_win32.ExportMemoryWin32HandleInfoNV' --     structure ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-00641# If the @pNext@ chain+--     includes a --     'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR' --     structure, it /must/ not include a --     'Vulkan.Extensions.VK_NV_external_memory_win32.ImportMemoryWin32HandleInfoNV' --     structure ----- -   If the parameters define an import operation, the external handle---     specified was created by the Vulkan API, and the external handle---     type is+-- -   #VUID-VkMemoryAllocateInfo-allocationSize-01742# If the parameters+--     define an import operation, the external handle specified was+--     created by the Vulkan API, and the external handle type is --     'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR', --     then the values of @allocationSize@ and @memoryTypeIndex@ /must/ --     match those specified when the payload being imported was created. ----- -   If the parameters define an import operation and the external handle---     specified was created by the Vulkan API, the device mask specified---     by+-- -   #VUID-VkMemoryAllocateInfo-None-00643# If the parameters define an+--     import operation and the external handle specified was created by+--     the Vulkan API, the device mask specified by --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo' --     /must/ match that specified when the payload being imported was --     allocated. ----- -   If the parameters define an import operation and the external handle---     specified was created by the Vulkan API, the list of physical---     devices that comprise the logical device passed to 'allocateMemory'---     /must/ match the list of physical devices that comprise the logical---     device on which the payload was originally allocated.+-- -   #VUID-VkMemoryAllocateInfo-None-00644# If the parameters define an+--     import operation and the external handle specified was created by+--     the Vulkan API, the list of physical devices that comprise the+--     logical device passed to 'allocateMemory' /must/ match the list of+--     physical devices that comprise the logical device on which the+--     payload was originally allocated. ----- -   If the parameters define an import operation and the external handle---     is an NT handle or a global share handle created outside of the---     Vulkan API, the value of @memoryTypeIndex@ /must/ be one of those---     returned by+-- -   #VUID-VkMemoryAllocateInfo-memoryTypeIndex-00645# If the parameters+--     define an import operation and the external handle is an NT handle+--     or a global share handle created outside of the Vulkan API, the+--     value of @memoryTypeIndex@ /must/ be one of those returned by --     'Vulkan.Extensions.VK_KHR_external_memory_win32.getMemoryWin32HandlePropertiesKHR' ----- -   If the parameters define an import operation, the external handle---     was created by the Vulkan API, and the external handle type is+-- -   #VUID-VkMemoryAllocateInfo-allocationSize-01743# If the parameters+--     define an import operation, the external handle was created by the+--     Vulkan API, and the external handle type is --     'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR' --     or --     'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR', --     then the values of @allocationSize@ and @memoryTypeIndex@ /must/ --     match those specified when the payload being imported was created. ----- -   If the parameters define an import operation and the external handle---     type is+-- -   #VUID-VkMemoryAllocateInfo-allocationSize-00647# If the parameters+--     define an import operation and the external handle type is --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT', --     @allocationSize@ /must/ match the size specified when creating the --     Direct3D 12 heap from which the payload was extracted. ----- -   If the parameters define an import operation and the external handle---     is a POSIX file descriptor created outside of the Vulkan API, the---     value of @memoryTypeIndex@ /must/ be one of those returned by+-- -   #VUID-VkMemoryAllocateInfo-memoryTypeIndex-00648# If the parameters+--     define an import operation and the external handle is a POSIX file+--     descriptor created outside of the Vulkan API, the value of+--     @memoryTypeIndex@ /must/ be one of those returned by --     'Vulkan.Extensions.VK_KHR_external_memory_fd.getMemoryFdPropertiesKHR' ----- -   If the protected memory feature is not enabled, the+-- -   #VUID-VkMemoryAllocateInfo-memoryTypeIndex-01872# If the protected+--     memory feature is not enabled, the --     'MemoryAllocateInfo'::@memoryTypeIndex@ /must/ not indicate a memory --     type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If the parameters define an import operation and the external handle---     is a host pointer, the value of @memoryTypeIndex@ /must/ be one of---     those returned by+-- -   #VUID-VkMemoryAllocateInfo-memoryTypeIndex-01744# If the parameters+--     define an import operation and the external handle is a host+--     pointer, the value of @memoryTypeIndex@ /must/ be one of those+--     returned by --     'Vulkan.Extensions.VK_EXT_external_memory_host.getMemoryHostPointerPropertiesEXT' ----- -   If the parameters define an import operation and the external handle---     is a host pointer, @allocationSize@ /must/ be an integer multiple of+-- -   #VUID-VkMemoryAllocateInfo-allocationSize-01745# If the parameters+--     define an import operation and the external handle is a host+--     pointer, @allocationSize@ /must/ be an integer multiple of --     'Vulkan.Extensions.VK_EXT_external_memory_host.PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@ ----- -   If the parameters define an import operation and the external handle---     is a host pointer, the @pNext@ chain /must/ not include a+-- -   #VUID-VkMemoryAllocateInfo-pNext-02805# If the parameters define an+--     import operation and the external handle is a host pointer, the+--     @pNext@ chain /must/ not include a --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV' --     structure with either its @image@ or @buffer@ field set to a value --     other than 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If the parameters define an import operation and the external handle---     is a host pointer, the @pNext@ chain /must/ not include a+-- -   #VUID-VkMemoryAllocateInfo-pNext-02806# If the parameters define an+--     import operation and the external handle is a host pointer, the+--     @pNext@ chain /must/ not include a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     structure with either its @image@ or @buffer@ field set to a value --     other than 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If the parameters define an import operation and the external handle---     type is+-- -   #VUID-VkMemoryAllocateInfo-allocationSize-02383# If the parameters+--     define an import operation and the external handle type is --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID', --     @allocationSize@ /must/ be the size returned by --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID' --     for the Android hardware buffer ----- -   If the parameters define an import operation and the external handle---     type is+-- -   #VUID-VkMemoryAllocateInfo-pNext-02384# If the parameters define an+--     import operation and the external handle type is --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID', --     and the @pNext@ chain does not include a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'@@ -953,15 +986,15 @@ --     @AHARDWAREBUFFER_FORMAT_BLOB@ and a @AHardwareBuffer_Desc@::@usage@ --     that includes @AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER@ ----- -   If the parameters define an import operation and the external handle---     type is+-- -   #VUID-VkMemoryAllocateInfo-memoryTypeIndex-02385# If the parameters+--     define an import operation and the external handle type is --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID', --     @memoryTypeIndex@ /must/ be one of those returned by --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.getAndroidHardwareBufferPropertiesANDROID' --     for the Android hardware buffer ----- -   If the parameters do not define an import operation, and the @pNext@---     chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-01874# If the parameters do not+--     define an import operation, and the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo' --     structure with --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'@@ -972,8 +1005,9 @@ --     'Vulkan.Core10.APIConstants.NULL_HANDLE', then @allocationSize@ --     /must/ be @0@, otherwise @allocationSize@ /must/ be greater than @0@ ----- -   If the parameters define an import operation, the external handle is---     an Android hardware buffer, and the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-02386# If the parameters define an+--     import operation, the external handle is an Android hardware buffer,+--     and the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     with @image@ that is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     the Android hardware buffer’s@@ -982,8 +1016,9 @@ --     @AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER@ or --     @AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE@ ----- -   If the parameters define an import operation, the external handle is---     an Android hardware buffer, and the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-02387# If the parameters define an+--     import operation, the external handle is an Android hardware buffer,+--     and the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     with @image@ that is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     the format of @image@ /must/ be@@ -994,16 +1029,18 @@ --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferFormatPropertiesANDROID'::@format@ --     for the Android hardware buffer ----- -   If the parameters define an import operation, the external handle is---     an Android hardware buffer, and the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-02388# If the parameters define an+--     import operation, the external handle is an Android hardware buffer,+--     and the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     structure with @image@ that is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', the width, height, and --     array layer dimensions of @image@ and the Android hardware buffer’s --     @AHardwareBuffer_Desc@ /must/ be identical ----- -   If the parameters define an import operation, the external handle is---     an Android hardware buffer, and the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-02389# If the parameters define an+--     import operation, the external handle is an Android hardware buffer,+--     and the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     structure with @image@ that is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the Android hardware@@ -1012,8 +1049,9 @@ --     includes @AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE@, the @image@ --     /must/ have a complete mipmap chain ----- -   If the parameters define an import operation, the external handle is---     an Android hardware buffer, and the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-02586# If the parameters define an+--     import operation, the external handle is an Android hardware buffer,+--     and the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     structure with @image@ that is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the Android hardware@@ -1022,8 +1060,9 @@ --     does not include @AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE@, the --     @image@ /must/ have exactly one mipmap level ----- -   If the parameters define an import operation, the external handle is---     an Android hardware buffer, and the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-02390# If the parameters define an+--     import operation, the external handle is an Android hardware buffer,+--     and the @pNext@ chain includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     structure with @image@ that is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', each bit set in the usage@@ -1033,14 +1072,14 @@ --     that bit /must/ be included in the Android hardware buffer’s --     @AHardwareBuffer_Desc@::@usage@ ----- -   If+-- -   #VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03329# If --     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@ --     is not zero, --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@ --     /must/ include --     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT' ----- -   If+-- -   #VUID-VkMemoryAllocateInfo-flags-03330# If --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@ --     includes --     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT',@@ -1048,7 +1087,7 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressCaptureReplay bufferDeviceAddressCaptureReplay> --     feature /must/ be enabled ----- -   If+-- -   #VUID-VkMemoryAllocateInfo-flags-03331# If --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.MemoryAllocateFlagsInfo'::@flags@ --     includes --     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT',@@ -1056,24 +1095,26 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress> --     feature /must/ be enabled ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkMemoryAllocateInfo-pNext-03332# If the @pNext@ chain+--     includes a --     'Vulkan.Extensions.VK_EXT_external_memory_host.ImportMemoryHostPointerInfoEXT' --     structure, --     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@ --     /must/ be zero ----- -   If the parameters define an import operation,+-- -   #VUID-VkMemoryAllocateInfo-opaqueCaptureAddress-03333# If the+--     parameters define an import operation, --     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.MemoryOpaqueCaptureAddressAllocateInfo'::@opaqueCaptureAddress@ --     /must/ be zero -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMemoryAllocateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_ALLOCATE_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+-- -   #VUID-VkMemoryAllocateInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationMemoryAllocateInfoNV', --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo', --     'Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV',@@ -1090,8 +1131,8 @@ --     or --     'Vulkan.Extensions.VK_EXT_memory_priority.MemoryPriorityAllocateInfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkMemoryAllocateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique -- -- = See Also --@@ -1175,37 +1216,43 @@ -- -- == Valid Usage ----- -   @memory@ /must/ be currently host mapped+-- -   #VUID-VkMappedMemoryRange-memory-00684# @memory@ /must/ be currently+--     host mapped ----- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @offset@ and @size@ /must/ specify a range contained within the---     currently mapped range of @memory@+-- -   #VUID-VkMappedMemoryRange-size-00685# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @offset@ and @size@ /must/+--     specify a range contained within the currently mapped range of+--     @memory@ ----- -   If @size@ is equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @offset@ /must/ be within the currently mapped range of @memory@+-- -   #VUID-VkMappedMemoryRange-size-00686# If @size@ is equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @offset@ /must/ be within+--     the currently mapped range of @memory@ ----- -   If @size@ is equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE', the---     end of the current mapping of @memory@ /must/ be a multiple of+-- -   #VUID-VkMappedMemoryRange-size-01389# If @size@ is equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', the end of the current+--     mapping of @memory@ /must/ be a multiple of --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@ --     bytes from the beginning of the memory object ----- -   @offset@ /must/ be a multiple of+-- -   #VUID-VkMappedMemoryRange-offset-00687# @offset@ /must/ be a+--     multiple of --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@ ----- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @size@ /must/ either be a multiple of+-- -   #VUID-VkMappedMemoryRange-size-01390# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ either be a+--     multiple of --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@nonCoherentAtomSize@, --     or @offset@ plus @size@ /must/ equal the size of @memory@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMappedMemoryRange-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MAPPED_MEMORY_RANGE' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkMappedMemoryRange-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-VkMappedMemoryRange-memory-parameter# @memory@ /must/ be a+--     valid 'Vulkan.Core10.Handles.DeviceMemory' handle -- -- = See Also --
src/Vulkan/Core10/MemoryManagement.hs view
@@ -75,13 +75,16 @@                              . (MonadIO io)                             => -- | @device@ is the logical device that owns the buffer.                                ---                               -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                               -- #VUID-vkGetBufferMemoryRequirements-device-parameter# @device@ /must/ be+                               -- a valid 'Vulkan.Core10.Handles.Device' handle                                Device                             -> -- | @buffer@ is the buffer to query.                                ---                               -- @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+                               -- #VUID-vkGetBufferMemoryRequirements-buffer-parameter# @buffer@ /must/ be+                               -- a valid 'Vulkan.Core10.Handles.Buffer' handle                                ---                               -- @buffer@ /must/ have been created, allocated, or retrieved from @device@+                               -- #VUID-vkGetBufferMemoryRequirements-buffer-parent# @buffer@ /must/ have+                               -- been created, allocated, or retrieved from @device@                                Buffer                             -> io (MemoryRequirements) getBufferMemoryRequirements device buffer = liftIO . evalContT $ do@@ -112,27 +115,32 @@ -- -- == Valid Usage ----- -   @buffer@ /must/ not already be backed by a memory object+-- -   #VUID-vkBindBufferMemory-buffer-01029# @buffer@ /must/ not already+--     be backed by a memory object ----- -   @buffer@ /must/ not have been created with any sparse memory binding---     flags+-- -   #VUID-vkBindBufferMemory-buffer-01030# @buffer@ /must/ not have been+--     created with any sparse memory binding flags ----- -   @memoryOffset@ /must/ be less than the size of @memory@+-- -   #VUID-vkBindBufferMemory-memoryOffset-01031# @memoryOffset@ /must/+--     be less than the size of @memory@ ----- -   @memory@ /must/ have been allocated using one of the memory types---     allowed in the @memoryTypeBits@ member of the 'MemoryRequirements'---     structure returned from a call to 'getBufferMemoryRequirements' with---     @buffer@+-- -   #VUID-vkBindBufferMemory-memory-01035# @memory@ /must/ have been+--     allocated using one of the memory types allowed in the+--     @memoryTypeBits@ member of the 'MemoryRequirements' structure+--     returned from a call to 'getBufferMemoryRequirements' with @buffer@ ----- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@---     member of the 'MemoryRequirements' structure returned from a call to+-- -   #VUID-vkBindBufferMemory-memoryOffset-01036# @memoryOffset@ /must/+--     be an integer multiple of the @alignment@ member of the+--     'MemoryRequirements' structure returned from a call to --     'getBufferMemoryRequirements' with @buffer@ ----- -   The @size@ member of the 'MemoryRequirements' structure returned---     from a call to 'getBufferMemoryRequirements' with @buffer@ /must/ be---     less than or equal to the size of @memory@ minus @memoryOffset@+-- -   #VUID-vkBindBufferMemory-size-01037# The @size@ member of the+--     'MemoryRequirements' structure returned from a call to+--     'getBufferMemoryRequirements' with @buffer@ /must/ be less than or+--     equal to the size of @memory@ minus @memoryOffset@ ----- -   If @buffer@ requires a dedicated allocation(as reported by+-- -   #VUID-vkBindBufferMemory-buffer-01444# If @buffer@ requires a+--     dedicated allocation(as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2' --     in --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation@@ -140,8 +148,9 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@ --     equal to @buffer@ ----- -   If the 'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when---     @memory@ was allocated included a+-- -   #VUID-vkBindBufferMemory-memory-01508# If the+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was+--     allocated included a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     structure in its @pNext@ chain, and --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@@@ -150,19 +159,19 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@, --     and @memoryOffset@ /must/ be zero ----- -   If buffer was created with the+-- -   #VUID-vkBindBufferMemory-None-01898# If buffer was created with the --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' --     bit set, the buffer /must/ be bound to a memory object allocated --     with a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If buffer was created with the+-- -   #VUID-vkBindBufferMemory-None-01899# If buffer was created with the --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' --     bit not set, the buffer /must/ not be bound to a memory object --     created with a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If @buffer@ was created with+-- -   #VUID-vkBindBufferMemory-buffer-01038# If @buffer@ was created with --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@ --     equal to 'Vulkan.Core10.FundamentalTypes.TRUE', @memory@ /must/ have --     been created with@@ -170,21 +179,23 @@ --     equal to a buffer handle created with identical creation parameters --     to @buffer@ and @memoryOffset@ /must/ be zero ----- -   If the value of+-- -   #VUID-vkBindBufferMemory-memory-02726# If the value of --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     used to allocate @memory@ is not @0@, it /must/ include at least one --     of the handles set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@ --     when @buffer@ was created ----- -   If @memory@ was created by a memory import operation, that is not+-- -   #VUID-vkBindBufferMemory-memory-02985# If @memory@ was created by a+--     memory import operation, that is not --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID' --     with a non-@NULL@ @buffer@ value, the external handle type of the --     imported memory /must/ also have been set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@ --     when @buffer@ was created ----- -   If @memory@ was created with the+-- -   #VUID-vkBindBufferMemory-memory-02986# If @memory@ was created with+--     the --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID' --     memory import operation with a non-@NULL@ @buffer@ value, --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'@@ -192,7 +203,7 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@ --     when @buffer@ was created ----- -   If the+-- -   #VUID-vkBindBufferMemory-bufferDeviceAddress-03339# If the --     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures'::@bufferDeviceAddress@ --     feature is enabled and @buffer@ was created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'@@ -202,18 +213,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkBindBufferMemory-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkBindBufferMemory-buffer-parameter# @buffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-vkBindBufferMemory-memory-parameter# @memory@ /must/ be a+--     valid 'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   @buffer@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkBindBufferMemory-buffer-parent# @buffer@ /must/ have been+--     created, allocated, or retrieved from @device@ ----- -   @memory@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkBindBufferMemory-memory-parent# @memory@ /must/ have been+--     created, allocated, or retrieved from @device@ -- -- == Host Synchronization --@@ -274,25 +287,30 @@ -- -- == Valid Usage ----- -   @image@ /must/ not have been created with the+-- -   #VUID-vkGetImageMemoryRequirements-image-01588# @image@ /must/ not+--     have been created with the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' --     flag set ----- -   If @image@ was created with the+-- -   #VUID-vkGetImageMemoryRequirements-image-04004# If @image@ was+--     created with the --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID' --     external memory handle type, then @image@ /must/ be bound to memory -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetImageMemoryRequirements-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-vkGetImageMemoryRequirements-image-parameter# @image@ /must/+--     be a valid 'Vulkan.Core10.Handles.Image' handle ----- -   @pMemoryRequirements@ /must/ be a valid pointer to a+-- -   #VUID-vkGetImageMemoryRequirements-pMemoryRequirements-parameter#+--     @pMemoryRequirements@ /must/ be a valid pointer to a --     'MemoryRequirements' structure ----- -   @image@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkGetImageMemoryRequirements-image-parent# @image@ /must/ have+--     been created, allocated, or retrieved from @device@ -- -- = See Also --@@ -333,14 +351,17 @@ -- -- == Valid Usage ----- -   @image@ /must/ not already be backed by a memory object+-- -   #VUID-vkBindImageMemory-image-01044# @image@ /must/ not already be+--     backed by a memory object ----- -   @image@ /must/ not have been created with any sparse memory binding---     flags+-- -   #VUID-vkBindImageMemory-image-01045# @image@ /must/ not have been+--     created with any sparse memory binding flags ----- -   @memoryOffset@ /must/ be less than the size of @memory@+-- -   #VUID-vkBindImageMemory-memoryOffset-01046# @memoryOffset@ /must/ be+--     less than the size of @memory@ ----- -   If @image@ requires a dedicated allocation (as reported by+-- -   #VUID-vkBindImageMemory-image-01445# If @image@ requires a dedicated+--     allocation (as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2' --     in --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation@@ -348,7 +369,7 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@ --     equal to @image@ ----- -   If the+-- -   #VUID-vkBindImageMemory-memory-02628# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing> --     feature is not enabled, and the --     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was@@ -361,7 +382,7 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@ --     and @memoryOffset@ /must/ be zero ----- -   If the+-- -   #VUID-vkBindImageMemory-memory-02629# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing> --     feature is enabled, and the --     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was@@ -381,19 +402,19 @@ --     parameter of the image being bound /must/ be equal to or smaller --     than the original image for which the allocation was created ----- -   If image was created with the+-- -   #VUID-vkBindImageMemory-None-01901# If image was created with the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT' --     bit set, the image /must/ be bound to a memory object allocated with --     a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If image was created with the+-- -   #VUID-vkBindImageMemory-None-01902# If image was created with the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT' --     bit not set, the image /must/ not be bound to a memory object --     created with a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If @image@ was created with+-- -   #VUID-vkBindImageMemory-image-01050# If @image@ was created with --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@ --     equal to 'Vulkan.Core10.FundamentalTypes.TRUE', @memory@ /must/ have --     been created with@@ -401,21 +422,23 @@ --     equal to an image handle created with identical creation parameters --     to @image@ and @memoryOffset@ /must/ be zero ----- -   If the value of+-- -   #VUID-vkBindImageMemory-memory-02728# If the value of --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     used to allocate @memory@ is not @0@, it /must/ include at least one --     of the handles set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when @image@ was created ----- -   If @memory@ was created by a memory import operation, that is not+-- -   #VUID-vkBindImageMemory-memory-02989# If @memory@ was created by a+--     memory import operation, that is not --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID' --     with a non-@NULL@ @buffer@ value, the external handle type of the --     imported memory /must/ also have been set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when @image@ was created ----- -   If @memory@ was created with the+-- -   #VUID-vkBindImageMemory-memory-02990# If @memory@ was created with+--     the --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID' --     memory import operation with a non-@NULL@ @buffer@ value, --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'@@ -423,38 +446,42 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when @image@ was created ----- -   @image@ /must/ not have been created with the+-- -   #VUID-vkBindImageMemory-image-01608# @image@ /must/ not have been+--     created with the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' --     set ----- -   @memory@ /must/ have been allocated using one of the memory types---     allowed in the @memoryTypeBits@ member of the 'MemoryRequirements'---     structure returned from a call to 'getImageMemoryRequirements' with---     @image@+-- -   #VUID-vkBindImageMemory-memory-01047# @memory@ /must/ have been+--     allocated using one of the memory types allowed in the+--     @memoryTypeBits@ member of the 'MemoryRequirements' structure+--     returned from a call to 'getImageMemoryRequirements' with @image@ ----- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@---     member of the 'MemoryRequirements' structure returned from a call to+-- -   #VUID-vkBindImageMemory-memoryOffset-01048# @memoryOffset@ /must/ be+--     an integer multiple of the @alignment@ member of the+--     'MemoryRequirements' structure returned from a call to --     'getImageMemoryRequirements' with @image@ ----- -   The difference of the size of @memory@ and @memoryOffset@ /must/ be---     greater than or equal to the @size@ member of the---     'MemoryRequirements' structure returned from a call to---     'getImageMemoryRequirements' with the same @image@+-- -   #VUID-vkBindImageMemory-size-01049# The difference of the size of+--     @memory@ and @memoryOffset@ /must/ be greater than or equal to the+--     @size@ member of the 'MemoryRequirements' structure returned from a+--     call to 'getImageMemoryRequirements' with the same @image@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkBindImageMemory-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-vkBindImageMemory-image-parameter# @image@ /must/ be a valid+--     'Vulkan.Core10.Handles.Image' handle ----- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-vkBindImageMemory-memory-parameter# @memory@ /must/ be a valid+--     'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   @image@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkBindImageMemory-image-parent# @image@ /must/ have been+--     created, allocated, or retrieved from @device@ ----- -   @memory@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkBindImageMemory-memory-parent# @memory@ /must/ have been+--     created, allocated, or retrieved from @device@ -- -- == Host Synchronization --
src/Vulkan/Core10/OtherTypes.hs view
@@ -87,14 +87,16 @@     -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks source access mask>.     ---    -- @srcAccessMask@ /must/ be a valid combination of+    -- #VUID-VkMemoryBarrier-srcAccessMask-parameter# @srcAccessMask@ /must/ be+    -- a valid combination of     -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values     srcAccessMask :: AccessFlags   , -- | @dstAccessMask@ is a bitmask of     -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' specifying a     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-masks destination access mask>.     ---    -- @dstAccessMask@ /must/ be a valid combination of+    -- #VUID-VkMemoryBarrier-dstAccessMask-parameter# @dstAccessMask@ /must/ be+    -- a valid combination of     -- 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values     dstAccessMask :: AccessFlags   }@@ -179,31 +181,37 @@ -- -- == Valid Usage ----- -   @offset@ /must/ be less than the size of @buffer@+-- -   #VUID-VkBufferMemoryBarrier-offset-01187# @offset@ /must/ be less+--     than the size of @buffer@ ----- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @size@ /must/ be greater than @0@+-- -   #VUID-VkBufferMemoryBarrier-size-01188# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be greater+--     than @0@ ----- -   If @size@ is not equal to 'Vulkan.Core10.APIConstants.WHOLE_SIZE',---     @size@ /must/ be less than or equal to than the size of @buffer@---     minus @offset@+-- -   #VUID-VkBufferMemoryBarrier-size-01189# If @size@ is not equal to+--     'Vulkan.Core10.APIConstants.WHOLE_SIZE', @size@ /must/ be less than+--     or equal to than the size of @buffer@ minus @offset@ ----- -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkBufferMemoryBarrier-buffer-01931# If @buffer@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   If @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, at+-- -   #VUID-VkBufferMemoryBarrier-srcQueueFamilyIndex-04087# If+--     @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, at --     least one /must/ not be a special queue family reserved for external --     memory ownership transfers, as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers ???> ----- -   If @buffer@ was created with a sharing mode of+-- -   #VUID-VkBufferMemoryBarrier-buffer-04088# If @buffer@ was created+--     with a sharing mode of --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', --     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not equal, and --     one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ is a special --     queue family values reserved for external memory transfers, the --     other /must/ be 'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED' ----- -   If @buffer@ was created with a sharing mode of+-- -   #VUID-VkBufferMemoryBarrier-buffer-04089# If @buffer@ was created+--     with a sharing mode of --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE', and --     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not equal, --     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ /must/ both be valid@@ -211,19 +219,21 @@ --     for external memory transfers, as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers ???> ----- -   If @buffer@ was created with a sharing mode of+-- -   #VUID-VkBufferMemoryBarrier-buffer-01191# If @buffer@ was created+--     with a sharing mode of --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', at least --     one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ /must/ be --     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBufferMemoryBarrier-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkBufferMemoryBarrier-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkBufferMemoryBarrier-buffer-parameter# @buffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle -- -- = See Also --@@ -377,30 +387,36 @@ -- -- == Valid Usage ----- -   @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@+-- -   #VUID-VkImageMemoryBarrier-subresourceRange-01486#+--     @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@ --     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was --     created ----- -   If @subresourceRange.levelCount@ is not+-- -   #VUID-VkImageMemoryBarrier-subresourceRange-01724# If+--     @subresourceRange.levelCount@ is not --     'Vulkan.Core10.APIConstants.REMAINING_MIP_LEVELS', --     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@ --     /must/ be less than or equal to the @mipLevels@ specified in --     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created ----- -   @subresourceRange.baseArrayLayer@ /must/ be less than the+-- -   #VUID-VkImageMemoryBarrier-subresourceRange-01488#+--     @subresourceRange.baseArrayLayer@ /must/ be less than the --     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo' --     when @image@ was created ----- -   If @subresourceRange.layerCount@ is not+-- -   #VUID-VkImageMemoryBarrier-subresourceRange-01725# If+--     @subresourceRange.layerCount@ is not --     'Vulkan.Core10.APIConstants.REMAINING_ARRAY_LAYERS', --     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@ --     /must/ be less than or equal to the @arrayLayers@ specified in --     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created ----- -   If @image@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkImageMemoryBarrier-image-01932# If @image@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01208# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -410,7 +426,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01209# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -420,7 +437,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01210# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -430,7 +448,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01211# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -441,7 +460,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01212# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -451,7 +471,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01213# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -461,7 +482,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01197# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -469,7 +491,8 @@ --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or the --     current layout of the image subresources affected by the barrier ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-newLayout-01198# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -477,7 +500,8 @@ --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED' ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01658# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -487,7 +511,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-01659# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -497,7 +522,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04065# If+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -509,7 +535,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04066# If+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -519,7 +546,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04067# If+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -531,7 +559,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04068# If+--     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -541,7 +570,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' --     set ----- -   If @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ define a+-- -   #VUID-VkImageMemoryBarrier-oldLayout-02088# If @srcQueueFamilyIndex@+--     and @dstQueueFamilyIndex@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers queue family ownership transfer> --     or @oldLayout@ and @newLayout@ define a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-image-layout-transitions image layout transition>,@@ -551,13 +581,15 @@ --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' --     set ----- -   If @image@ has a single-plane color format or is not /disjoint/,---     then the @aspectMask@ member of @subresourceRange@ /must/ be+-- -   #VUID-VkImageMemoryBarrier-image-01671# If @image@ has a+--     single-plane color format or is not /disjoint/, then the+--     @aspectMask@ member of @subresourceRange@ /must/ be --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT' ----- -   If @image@ has a multi-planar format and the image is /disjoint/,---     then the @aspectMask@ member of @subresourceRange@ /must/ include---     either at least one of+-- -   #VUID-VkImageMemoryBarrier-image-01672# If @image@ has a+--     multi-planar format and the image is /disjoint/, then the+--     @aspectMask@ member of @subresourceRange@ /must/ include either at+--     least one of --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT', --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT', --     and@@ -565,39 +597,43 @@ --     or /must/ include --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT' ----- -   If @image@ has a multi-planar format with only two planes, then the---     @aspectMask@ member of @subresourceRange@ /must/ not include+-- -   #VUID-VkImageMemoryBarrier-image-01673# If @image@ has a+--     multi-planar format with only two planes, then the @aspectMask@+--     member of @subresourceRange@ /must/ not include --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT' ----- -   If @image@ has a depth\/stencil format with both depth and stencil---     and the+-- -   #VUID-VkImageMemoryBarrier-image-03319# If @image@ has a+--     depth\/stencil format with both depth and stencil and the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts> --     feature is enabled, then the @aspectMask@ member of --     @subresourceRange@ /must/ include either or both --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT' ----- -   If @image@ has a depth\/stencil format with both depth and stencil---     and the+-- -   #VUID-VkImageMemoryBarrier-image-03320# If @image@ has a+--     depth\/stencil format with both depth and stencil and the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts> --     feature is not enabled, then the @aspectMask@ member of --     @subresourceRange@ /must/ include both --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT' ----- -   If @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, at+-- -   #VUID-VkImageMemoryBarrier-srcQueueFamilyIndex-04070# If+--     @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, at --     least one /must/ not be a special queue family reserved for external --     memory ownership transfers, as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers ???> ----- -   If @image@ was created with a sharing mode of+-- -   #VUID-VkImageMemoryBarrier-image-04071# If @image@ was created with+--     a sharing mode of --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', --     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not equal, and --     one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ is a special --     queue family values reserved for external memory transfers, the --     other /must/ be 'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED' ----- -   If @image@ was created with a sharing mode of+-- -   #VUID-VkImageMemoryBarrier-image-04072# If @image@ was created with+--     a sharing mode of --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE', and --     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ are not equal, --     @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ /must/ both be valid@@ -605,31 +641,35 @@ --     for external memory transfers, as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers ???> ----- -   If @image@ was created with a sharing mode of+-- -   #VUID-VkImageMemoryBarrier-image-01381# If @image@ was created with+--     a sharing mode of --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', at least --     one of @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ /must/ be --     'Vulkan.Core10.APIConstants.QUEUE_FAMILY_IGNORED' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageMemoryBarrier-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkImageMemoryBarrier-pNext-pNext# @pNext@ /must/ be @NULL@ or+--     a pointer to a valid instance of --     'Vulkan.Extensions.VK_EXT_sample_locations.SampleLocationsInfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkImageMemoryBarrier-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @oldLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+-- -   #VUID-VkImageMemoryBarrier-oldLayout-parameter# @oldLayout@ /must/+--     be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value ----- -   @newLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+-- -   #VUID-VkImageMemoryBarrier-newLayout-parameter# @newLayout@ /must/+--     be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-VkImageMemoryBarrier-image-parameter# @image@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle ----- -   @subresourceRange@ /must/ be a valid+-- -   #VUID-VkImageMemoryBarrier-subresourceRange-parameter#+--     @subresourceRange@ /must/ be a valid --     'Vulkan.Core10.ImageView.ImageSubresourceRange' structure -- -- = See Also@@ -755,12 +795,12 @@ -- -- == Valid Usage ----- -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in+-- -   #VUID-VkDrawIndirectCommand-None-00500# For a given vertex buffer+--     binding, any attribute data fetched /must/ be entirely contained+--     within the corresponding vertex buffer binding, as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input> ----- -   If the+-- -   #VUID-VkDrawIndirectCommand-firstInstance-00501# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance> --     feature is not enabled, @firstInstance@ /must/ be @0@ --@@ -834,18 +874,20 @@ -- -- == Valid Usage ----- -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in+-- -   #VUID-VkDrawIndexedIndirectCommand-None-00552# For a given vertex+--     buffer binding, any attribute data fetched /must/ be entirely+--     contained within the corresponding vertex buffer binding, as+--     described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input> ----- -   (@indexSize@ × (@firstIndex@ + @indexCount@) + @offset@) /must/ be---     less than or equal to the size of the bound index buffer, with---     @indexSize@ being based on the type specified by @indexType@, where---     the index buffer, @indexType@, and @offset@ are specified via+-- -   #VUID-VkDrawIndexedIndirectCommand-indexSize-00553# (@indexSize@ ×+--     (@firstIndex@ + @indexCount@) + @offset@) /must/ be less than or+--     equal to the size of the bound index buffer, with @indexSize@ being+--     based on the type specified by @indexType@, where the index buffer,+--     @indexType@, and @offset@ are specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer' ----- -   If the+-- -   #VUID-VkDrawIndexedIndirectCommand-firstInstance-00554# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectFirstInstance drawIndirectFirstInstance> --     feature is not enabled, @firstInstance@ /must/ be @0@ --@@ -932,17 +974,20 @@ data DispatchIndirectCommand = DispatchIndirectCommand   { -- | @x@ is the number of local workgroups to dispatch in the X dimension.     ---    -- @x@ /must/ be less than or equal to+    -- #VUID-VkDispatchIndirectCommand-x-00417# @x@ /must/ be less than or+    -- equal to     -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]     x :: Word32   , -- | @y@ is the number of local workgroups to dispatch in the Y dimension.     ---    -- @y@ /must/ be less than or equal to+    -- #VUID-VkDispatchIndirectCommand-y-00418# @y@ /must/ be less than or+    -- equal to     -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]     y :: Word32   , -- | @z@ is the number of local workgroups to dispatch in the Z dimension.     ---    -- @z@ /must/ be less than or equal to+    -- #VUID-VkDispatchIndirectCommand-z-00419# @z@ /must/ be less than or+    -- equal to     -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]     z :: Word32   }
src/Vulkan/Core10/Pass.hs view
@@ -151,24 +151,28 @@ -- -- == Valid Usage ----- -   If @pCreateInfo->flags@ does not include+-- -   #VUID-vkCreateFramebuffer-pCreateInfo-02777# If @pCreateInfo->flags@+--     does not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     and @attachmentCount@ is not @0@, each element of --     @pCreateInfo->pAttachments@ /must/ have been created on @device@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateFramebuffer-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'FramebufferCreateInfo' structure+-- -   #VUID-vkCreateFramebuffer-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'FramebufferCreateInfo'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateFramebuffer-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pFramebuffer@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Framebuffer' handle+-- -   #VUID-vkCreateFramebuffer-pFramebuffer-parameter# @pFramebuffer@+--     /must/ be a valid pointer to a 'Vulkan.Core10.Handles.Framebuffer'+--     handle -- -- == Return Codes --@@ -239,31 +243,35 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @framebuffer@ /must/ have---     completed execution+-- -   #VUID-vkDestroyFramebuffer-framebuffer-00892# All submitted commands+--     that refer to @framebuffer@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyFramebuffer-framebuffer-00893# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @framebuffer@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyFramebuffer-framebuffer-00894# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @framebuffer@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyFramebuffer-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @framebuffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @framebuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Framebuffer'---     handle+-- -   #VUID-vkDestroyFramebuffer-framebuffer-parameter# If @framebuffer@+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @framebuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Framebuffer' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyFramebuffer-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @framebuffer@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyFramebuffer-framebuffer-parent# If @framebuffer@ is a+--     valid handle, it /must/ have been created, allocated, or retrieved+--     from @device@ -- -- == Host Synchronization --@@ -307,17 +315,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateRenderPass-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'RenderPassCreateInfo' structure+-- -   #VUID-vkCreateRenderPass-pCreateInfo-parameter# @pCreateInfo@ /must/+--     be a valid pointer to a valid 'RenderPassCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateRenderPass-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pRenderPass@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.RenderPass' handle+-- -   #VUID-vkCreateRenderPass-pRenderPass-parameter# @pRenderPass@ /must/+--     be a valid pointer to a 'Vulkan.Core10.Handles.RenderPass' handle -- -- == Return Codes --@@ -388,31 +397,35 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @renderPass@ /must/ have---     completed execution+-- -   #VUID-vkDestroyRenderPass-renderPass-00873# All submitted commands+--     that refer to @renderPass@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyRenderPass-renderPass-00874# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @renderPass@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyRenderPass-renderPass-00875# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @renderPass@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyRenderPass-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @renderPass@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'---     handle+-- -   #VUID-vkDestroyRenderPass-renderPass-parameter# If @renderPass@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @renderPass@ /must/ be+--     a valid 'Vulkan.Core10.Handles.RenderPass' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyRenderPass-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @renderPass@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyRenderPass-renderPass-parent# If @renderPass@ is a+--     valid handle, it /must/ have been created, allocated, or retrieved+--     from @device@ -- -- == Host Synchronization --@@ -486,16 +499,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetRenderAreaGranularity-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'---     handle+-- -   #VUID-vkGetRenderAreaGranularity-renderPass-parameter# @renderPass@+--     /must/ be a valid 'Vulkan.Core10.Handles.RenderPass' handle ----- -   @pGranularity@ /must/ be a valid pointer to a+-- -   #VUID-vkGetRenderAreaGranularity-pGranularity-parameter#+--     @pGranularity@ /must/ be a valid pointer to a --     'Vulkan.Core10.FundamentalTypes.Extent2D' structure ----- -   @renderPass@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkGetRenderAreaGranularity-renderPass-parent# @renderPass@+--     /must/ have been created, allocated, or retrieved from @device@ -- -- = See Also --@@ -650,32 +665,37 @@ -- -- == Valid Usage ----- -   @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-finalLayout-00843# @finalLayout@+--     /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED' ----- -   If @format@ is a color format, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03280# If @format@ is a color+--     format, @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL', --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL' ----- -   If @format@ is a depth\/stencil format, @initialLayout@ /must/ not---     be+-- -   #VUID-VkAttachmentDescription-format-03281# If @format@ is a+--     depth\/stencil format, @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL' ----- -   If @format@ is a color format, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03282# If @format@ is a color+--     format, @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL', --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL' ----- -   If @format@ is a depth\/stencil format, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03283# If @format@ is a+--     depth\/stencil format, @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL' ----- -   If the+-- -   #VUID-VkAttachmentDescription-separateDepthStencilLayouts-03284# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts> --     feature is not enabled, @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',@@ -684,7 +704,8 @@ --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If the+-- -   #VUID-VkAttachmentDescription-separateDepthStencilLayouts-03285# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts> --     feature is not enabled, @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',@@ -693,88 +714,104 @@ --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a color format, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03286# If @format@ is a color+--     format, @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL', --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a color format, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03287# If @format@ is a color+--     format, @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL', --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes both depth and---     stencil aspects, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03288# If @format@ is a+--     depth\/stencil format which includes both depth and stencil aspects,+--     @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL', --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes both depth and---     stencil aspects, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03289# If @format@ is a+--     depth\/stencil format which includes both depth and stencil aspects,+--     @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL', --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes only the depth---     aspect, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03290# If @format@ is a+--     depth\/stencil format which includes only the depth aspect,+--     @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes only the depth---     aspect, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03291# If @format@ is a+--     depth\/stencil format which includes only the depth aspect,+--     @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes only the---     stencil aspect, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03292# If @format@ is a+--     depth\/stencil format which includes only the stencil aspect,+--     @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes only the---     stencil aspect, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription-format-03293# If @format@ is a+--     depth\/stencil format which includes only the stencil aspect,+--     @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' -- -- == Valid Usage (Implicit) ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkAttachmentDescription-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits' --     values ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-VkAttachmentDescription-format-parameter# @format@ /must/ be a+--     valid 'Vulkan.Core10.Enums.Format.Format' value ----- -   @samples@ /must/ be a valid+-- -   #VUID-VkAttachmentDescription-samples-parameter# @samples@ /must/ be+--     a valid --     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value ----- -   @loadOp@ /must/ be a valid---     'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value+-- -   #VUID-VkAttachmentDescription-loadOp-parameter# @loadOp@ /must/ be a+--     valid 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value ----- -   @storeOp@ /must/ be a valid---     'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value+-- -   #VUID-VkAttachmentDescription-storeOp-parameter# @storeOp@ /must/ be+--     a valid 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'+--     value ----- -   @stencilLoadOp@ /must/ be a valid+-- -   #VUID-VkAttachmentDescription-stencilLoadOp-parameter#+--     @stencilLoadOp@ /must/ be a valid --     'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value ----- -   @stencilStoreOp@ /must/ be a valid+-- -   #VUID-VkAttachmentDescription-stencilStoreOp-parameter#+--     @stencilStoreOp@ /must/ be a valid --     'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value ----- -   @initialLayout@ /must/ be a valid+-- -   #VUID-VkAttachmentDescription-initialLayout-parameter#+--     @initialLayout@ /must/ be a valid --     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value ----- -   @finalLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+-- -   #VUID-VkAttachmentDescription-finalLayout-parameter# @finalLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value -- -- = See Also --@@ -890,7 +927,7 @@ -- -- == Valid Usage ----- -   If @attachment@ is not+-- -   #VUID-VkAttachmentReference-layout-00857# If @attachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@ /must/ not --     be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED',@@ -903,8 +940,8 @@ -- -- == Valid Usage (Implicit) ----- -   @layout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+-- -   #VUID-VkAttachmentReference-layout-parameter# @layout@ /must/ be a+--     valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value -- -- = See Also --@@ -1068,43 +1105,51 @@ -- -- == Valid Usage ----- -   @pipelineBindPoint@ /must/ be+-- -   #VUID-VkSubpassDescription-pipelineBindPoint-00844#+--     @pipelineBindPoint@ /must/ be --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   @colorAttachmentCount@ /must/ be less than or equal to+-- -   #VUID-VkSubpassDescription-colorAttachmentCount-00845#+--     @colorAttachmentCount@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxColorAttachments@ ----- -   If the first use of an attachment in this render pass is as an input---     attachment, and the attachment is not also used as a color or---     depth\/stencil attachment in the same subpass, then @loadOp@ /must/---     not be+-- -   #VUID-VkSubpassDescription-loadOp-00846# If the first use of an+--     attachment in this render pass is as an input attachment, and the+--     attachment is not also used as a color or depth\/stencil attachment+--     in the same subpass, then @loadOp@ /must/ not be --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' ----- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment+-- -   #VUID-VkSubpassDescription-pResolveAttachments-00847# If+--     @pResolveAttachments@ is not @NULL@, for each resolve attachment --     that is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the --     corresponding color attachment /must/ not be --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment+-- -   #VUID-VkSubpassDescription-pResolveAttachments-00848# If+--     @pResolveAttachments@ is not @NULL@, for each resolve attachment --     that is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the --     corresponding color attachment /must/ not have a sample count of --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that---     is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a+-- -   #VUID-VkSubpassDescription-pResolveAttachments-00849# If+--     @pResolveAttachments@ is not @NULL@, each resolve attachment that is+--     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a --     sample count of --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that---     is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have---     the same 'Vulkan.Core10.Enums.Format.Format' as its corresponding---     color attachment+-- -   #VUID-VkSubpassDescription-pResolveAttachments-00850# If+--     @pResolveAttachments@ is not @NULL@, each resolve attachment that is+--     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have the+--     same 'Vulkan.Core10.Enums.Format.Format' as its corresponding color+--     attachment ----- -   All attachments in @pColorAttachments@ that are not+-- -   #VUID-VkSubpassDescription-pColorAttachments-01417# All attachments+--     in @pColorAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have the same --     sample count ----- -   All attachments in @pInputAttachments@ that are not+-- -   #VUID-VkSubpassDescription-pInputAttachments-02647# All attachments+--     in @pInputAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have image --     formats whose --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>@@ -1113,35 +1158,40 @@ --     or --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   All attachments in @pColorAttachments@ that are not+-- -   #VUID-VkSubpassDescription-pColorAttachments-02648# All attachments+--     in @pColorAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have image --     formats whose --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' ----- -   All attachments in @pResolveAttachments@ that are not+-- -   #VUID-VkSubpassDescription-pResolveAttachments-02649# All+--     attachments in @pResolveAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have image --     formats whose --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' ----- -   If @pDepthStencilAttachment@ is not @NULL@ and the attachment is not+-- -   #VUID-VkSubpassDescription-pDepthStencilAttachment-02650# If+--     @pDepthStencilAttachment@ is not @NULL@ and the attachment is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have a --     image format whose --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, and---     all attachments in @pColorAttachments@ that are not+-- -   #VUID-VkSubpassDescription-pColorAttachments-01506# If the+--     @VK_AMD_mixed_attachment_samples@ extension is enabled, and all+--     attachments in @pColorAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a sample --     count that is smaller than or equal to the sample count of --     @pDepthStencilAttachment@ if it is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   If neither the @VK_AMD_mixed_attachment_samples@ nor the+-- -   #VUID-VkSubpassDescription-pDepthStencilAttachment-01418# If neither+--     the @VK_AMD_mixed_attachment_samples@ nor the --     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if --     @pDepthStencilAttachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' and any attachments@@ -1149,86 +1199,97 @@ --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', they /must/ have the --     same sample count ----- -   The @attachment@ member of each element of @pPreserveAttachments@---     /must/ not be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'+-- -   #VUID-VkSubpassDescription-attachment-00853# The @attachment@ member+--     of each element of @pPreserveAttachments@ /must/ not be+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   Each element of @pPreserveAttachments@ /must/ not also be an element---     of any other member of the subpass description+-- -   #VUID-VkSubpassDescription-pPreserveAttachments-00854# Each element+--     of @pPreserveAttachments@ /must/ not also be an element of any other+--     member of the subpass description ----- -   If any attachment is used by more than one 'AttachmentReference'---     member, then each use /must/ use the same @layout@+-- -   #VUID-VkSubpassDescription-layout-02519# If any attachment is used+--     by more than one 'AttachmentReference' member, then each use /must/+--     use the same @layout@ ----- -   Each attachment /must/ follow the+-- -   #VUID-VkSubpassDescription-None-04437# Each attachment /must/ follow+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#attachment-type-imagelayout image layout requirements> --     specified for its attachment type ----- -   If @flags@ includes+-- -   #VUID-VkSubpassDescription-flags-00856# If @flags@ includes --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX', --     it /must/ also include --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX' ----- -   If @flags@ includes+-- -   #VUID-VkSubpassDescription-flags-03341# If @flags@ includes --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM', --     and if @pResolveAttachments@ is not @NULL@, then each resolve --     attachment /must/ be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   If @flags@ includes+-- -   #VUID-VkSubpassDescription-flags-03342# If @flags@ includes --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM', --     and if @pDepthStencilResolveAttachmentKHR@ is not @NULL@, then the --     depth\/stencil resolve attachment /must/ be --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   If @flags@ includes+-- -   #VUID-VkSubpassDescription-flags-03343# If @flags@ includes --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM', --     then the subpass /must/ be the last subpass in a subpass dependency --     chain ----- -   If @flags@ includes+-- -   #VUID-VkSubpassDescription-flags-03344# If @flags@ includes --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM', --     then the sample count of the input attachments /must/ equal --     @rasterizationSamples@ ----- -   If @flags@ includes+-- -   #VUID-VkSubpassDescription-flags-03345# If @flags@ includes --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM', --     and if @sampleShadingEnable@ is enabled (explicitly or implicitly) --     then @minSampleShading@ /must/ equal 0.0 ----- -   If the render pass is created with+-- -   #VUID-VkSubpassDescription-pInputAttachments-02868# If the render+--     pass is created with --     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM' --     each of the elements of @pInputAttachments@ /must/ be --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   @pDepthStencilAttachment@ and @pColorAttachments@ must not contain+-- -   #VUID-VkSubpassDescription-pDepthStencilAttachment-04438#+--     @pDepthStencilAttachment@ and @pColorAttachments@ must not contain --     references to the same attachment -- -- == Valid Usage (Implicit) ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDescription-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits' --     values ----- -   @pipelineBindPoint@ /must/ be a valid+-- -   #VUID-VkSubpassDescription-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value ----- -   If @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be---     a valid pointer to an array of @inputAttachmentCount@ valid+-- -   #VUID-VkSubpassDescription-pInputAttachments-parameter# If+--     @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be a+--     valid pointer to an array of @inputAttachmentCount@ valid --     'AttachmentReference' structures ----- -   If @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be---     a valid pointer to an array of @colorAttachmentCount@ valid+-- -   #VUID-VkSubpassDescription-pColorAttachments-parameter# If+--     @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be a+--     valid pointer to an array of @colorAttachmentCount@ valid --     'AttachmentReference' structures ----- -   If @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is---     not @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an---     array of @colorAttachmentCount@ valid 'AttachmentReference'---     structures+-- -   #VUID-VkSubpassDescription-pResolveAttachments-parameter# If+--     @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is not+--     @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an array+--     of @colorAttachmentCount@ valid 'AttachmentReference' structures ----- -   If @pDepthStencilAttachment@ is not @NULL@,---     @pDepthStencilAttachment@ /must/ be a valid pointer to a valid---     'AttachmentReference' structure+-- -   #VUID-VkSubpassDescription-pDepthStencilAttachment-parameter# If+--     @pDepthStencilAttachment@ is not @NULL@, @pDepthStencilAttachment@+--     /must/ be a valid pointer to a valid 'AttachmentReference' structure ----- -   If @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@---     /must/ be a valid pointer to an array of @preserveAttachmentCount@+-- -   #VUID-VkSubpassDescription-pPreserveAttachments-parameter# If+--     @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@ /must/+--     be a valid pointer to an array of @preserveAttachmentCount@ --     @uint32_t@ values -- -- = See Also@@ -1444,39 +1505,42 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkSubpassDependency-srcStageMask-00860# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders> --     feature is not enabled, @srcStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT' ----- -   If the+-- -   #VUID-VkSubpassDependency-dstStageMask-00861# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders> --     feature is not enabled, @dstStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT' ----- -   If the+-- -   #VUID-VkSubpassDependency-srcStageMask-00862# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders> --     feature is not enabled, @srcStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT' --     or --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' ----- -   If the+-- -   #VUID-VkSubpassDependency-dstStageMask-00863# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders> --     feature is not enabled, @dstStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT' --     or --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' ----- -   @srcSubpass@ /must/ be less than or equal to @dstSubpass@, unless---     one of them is 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', to---     avoid cyclic dependencies and ensure a valid execution order+-- -   #VUID-VkSubpassDependency-srcSubpass-00864# @srcSubpass@ /must/ be+--     less than or equal to @dstSubpass@, unless one of them is+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', to avoid cyclic+--     dependencies and ensure a valid execution order ----- -   @srcSubpass@ and @dstSubpass@ /must/ not both be equal to+-- -   #VUID-VkSubpassDependency-srcSubpass-00865# @srcSubpass@ and+--     @dstSubpass@ /must/ not both be equal to --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL' ----- -   If @srcSubpass@ is equal to @dstSubpass@ and not all of the stages---     in @srcStageMask@ and @dstStageMask@ are+-- -   #VUID-VkSubpassDependency-srcSubpass-00867# If @srcSubpass@ is equal+--     to @dstSubpass@ and not all of the stages in @srcStageMask@ and+--     @dstStageMask@ are --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stages>, --     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>@@ -1486,75 +1550,87 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earliest> --     pipeline stage in @dstStageMask@ ----- -   Any access flag included in @srcAccessMask@ /must/ be supported by---     one of the pipeline stages in @srcStageMask@, as specified in the+-- -   #VUID-VkSubpassDependency-srcAccessMask-00868# Any access flag+--     included in @srcAccessMask@ /must/ be supported by one of the+--     pipeline stages in @srcStageMask@, as specified in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types> ----- -   Any access flag included in @dstAccessMask@ /must/ be supported by---     one of the pipeline stages in @dstStageMask@, as specified in the+-- -   #VUID-VkSubpassDependency-dstAccessMask-00869# Any access flag+--     included in @dstAccessMask@ /must/ be supported by one of the+--     pipeline stages in @dstStageMask@, as specified in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types> ----- -   If @srcSubpass@ equals @dstSubpass@, and @srcStageMask@ and---     @dstStageMask@ both include a+-- -   #VUID-VkSubpassDependency-srcSubpass-02243# If @srcSubpass@ equals+--     @dstSubpass@, and @srcStageMask@ and @dstStageMask@ both include a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stage>, --     then @dependencyFlags@ /must/ include --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT' ----- -   If @dependencyFlags@ includes+-- -   #VUID-VkSubpassDependency-dependencyFlags-02520# If+--     @dependencyFlags@ includes --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT', --     @srcSubpass@ /must/ not be equal to --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL' ----- -   If @dependencyFlags@ includes+-- -   #VUID-VkSubpassDependency-dependencyFlags-02521# If+--     @dependencyFlags@ includes --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT', --     @dstSubpass@ /must/ not be equal to --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL' ----- -   If @srcSubpass@ equals @dstSubpass@ and that subpass has more than---     one bit set in the view mask, then @dependencyFlags@ /must/ include+-- -   #VUID-VkSubpassDependency-srcSubpass-00872# If @srcSubpass@ equals+--     @dstSubpass@ and that subpass has more than one bit set in the view+--     mask, then @dependencyFlags@ /must/ include --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT' ----- -   If the+-- -   #VUID-VkSubpassDependency-srcStageMask-02099# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders> --     feature is not enabled, @srcStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV' ----- -   If the+-- -   #VUID-VkSubpassDependency-srcStageMask-02100# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders> --     feature is not enabled, @srcStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV' ----- -   If the+-- -   #VUID-VkSubpassDependency-dstStageMask-02101# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders> --     feature is not enabled, @dstStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV' ----- -   If the+-- -   #VUID-VkSubpassDependency-dstStageMask-02102# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders> --     feature is not enabled, @dstStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV' -- -- == Valid Usage (Implicit) ----- -   @srcStageMask@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency-srcStageMask-parameter# @srcStageMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' --     values ----- -   @srcStageMask@ /must/ not be @0@+-- -   #VUID-VkSubpassDependency-srcStageMask-requiredbitmask#+--     @srcStageMask@ /must/ not be @0@ ----- -   @dstStageMask@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency-dstStageMask-parameter# @dstStageMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' --     values ----- -   @dstStageMask@ /must/ not be @0@+-- -   #VUID-VkSubpassDependency-dstStageMask-requiredbitmask#+--     @dstStageMask@ /must/ not be @0@ ----- -   @srcAccessMask@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency-srcAccessMask-parameter# @srcAccessMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values ----- -   @dstAccessMask@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency-dstAccessMask-parameter# @dstAccessMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values ----- -   @dependencyFlags@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency-dependencyFlags-parameter#+--     @dependencyFlags@ /must/ be a valid combination of --     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values -- -- = See Also@@ -1660,50 +1736,57 @@ -- -- == Valid Usage ----- -   If the @attachment@ member of any element of @pInputAttachments@,---     @pColorAttachments@, @pResolveAttachments@ or---     @pDepthStencilAttachment@, or any element of @pPreserveAttachments@---     in any element of @pSubpasses@ is not+-- -   #VUID-VkRenderPassCreateInfo-attachment-00834# If the @attachment@+--     member of any element of @pInputAttachments@, @pColorAttachments@,+--     @pResolveAttachments@ or @pDepthStencilAttachment@, or any element+--     of @pPreserveAttachments@ in any element of @pSubpasses@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it /must/ be less --     than @attachmentCount@ ----- -   For any member of @pAttachments@ with a @loadOp@ equal to+-- -   #VUID-VkRenderPassCreateInfo-pAttachments-00836# For any member of+--     @pAttachments@ with a @loadOp@ equal to --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the --     first use of that attachment /must/ not specify a @layout@ equal to --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL' ----- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to+-- -   #VUID-VkRenderPassCreateInfo-pAttachments-02511# For any member of+--     @pAttachments@ with a @stencilLoadOp@ equal to --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the --     first use of that attachment /must/ not specify a @layout@ equal to --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL' ----- -   For any member of @pAttachments@ with a @loadOp@ equal to+-- -   #VUID-VkRenderPassCreateInfo-pAttachments-01566# For any member of+--     @pAttachments@ with a @loadOp@ equal to --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the --     first use of that attachment /must/ not specify a @layout@ equal to --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL' ----- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to+-- -   #VUID-VkRenderPassCreateInfo-pAttachments-01567# For any member of+--     @pAttachments@ with a @stencilLoadOp@ equal to --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the --     first use of that attachment /must/ not specify a @layout@ equal to --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-01926# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo' --     structure, the @subpass@ member of each element of its --     @pAspectReferences@ member /must/ be less than @subpassCount@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-01927# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo' --     structure, the @inputAttachmentIndex@ member of each element of its --     @pAspectReferences@ member /must/ be less than the value of --     @inputAttachmentCount@ in the member of @pSubpasses@ identified by --     its @subpass@ member ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-01963# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo' --     structure, for any element of the @pInputAttachments@ member of any --     element of @pSubpasses@ where the @attachment@ member is not@@ -1713,23 +1796,27 @@ --     /must/ only include aspects that are present in images of the format --     specified by the element of @pAttachments@ at @attachment@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-01928# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     structure, and its @subpassCount@ member is not zero, that member --     /must/ be equal to the value of @subpassCount@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-01929# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     structure, if its @dependencyCount@ member is not zero, it /must/ be --     equal to @dependencyCount@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-01930# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     structure, for each non-zero element of @pViewOffsets@, the --     @srcSubpass@ and @dstSubpass@ members of @pDependencies@ at the same --     index /must/ not be equal ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-02512# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     structure, for any element of @pDependencies@ with a --     @dependencyFlags@ member that does not include@@ -1738,37 +1825,43 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     instance /must/ be @0@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-02513# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     structure, elements of its @pViewMasks@ member /must/ either all be --     @0@, or all not be @0@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-02514# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     structure, and each element of its @pViewMasks@ member is @0@, the --     @dependencyFlags@ member of each element of @pDependencies@ /must/ --     not include --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT' ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-02515# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     structure, and each element of its @pViewMasks@ member is @0@, --     @correlatedViewMaskCount@ /must/ be @0@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkRenderPassCreateInfo-pNext-02516# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' --     structure, each element of its @pViewMask@ member /must/ not have a --     bit set at an index greater than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@ ----- -   For any element of @pDependencies@, if the @srcSubpass@ is not+-- -   #VUID-VkRenderPassCreateInfo-pDependencies-00837# For any element of+--     @pDependencies@, if the @srcSubpass@ is not --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage flags --     included in the @srcStageMask@ member of that dependency /must/ be a --     pipeline stage supported by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline> --     identified by the @pipelineBindPoint@ member of the source subpass ----- -   For any element of @pDependencies@, if the @dstSubpass@ is not+-- -   #VUID-VkRenderPassCreateInfo-pDependencies-00838# For any element of+--     @pDependencies@, if the @dstSubpass@ is not --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage flags --     included in the @dstStageMask@ member of that dependency /must/ be a --     pipeline stage supported by the@@ -1776,44 +1869,51 @@ --     identified by the @pipelineBindPoint@ member of the destination --     subpass ----- -   The @srcSubpass@ member of each element of @pDependencies@ /must/ be---     less than @subpassCount@+-- -   #VUID-VkRenderPassCreateInfo-srcSubpass-02517# The @srcSubpass@+--     member of each element of @pDependencies@ /must/ be less than+--     @subpassCount@ ----- -   The @dstSubpass@ member of each element of @pDependencies@ /must/ be---     less than @subpassCount@+-- -   #VUID-VkRenderPassCreateInfo-dstSubpass-02518# The @dstSubpass@+--     member of each element of @pDependencies@ /must/ be less than+--     @subpassCount@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRenderPassCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_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+-- -   #VUID-VkRenderPassCreateInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT', --     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.RenderPassInputAttachmentAspectCreateInfo', --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.RenderPassMultiviewCreateInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkRenderPassCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkRenderPassCreateInfo-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits' --     values ----- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid+-- -   #VUID-VkRenderPassCreateInfo-pAttachments-parameter# If+--     @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid --     pointer to an array of @attachmentCount@ valid --     'AttachmentDescription' structures ----- -   @pSubpasses@ /must/ be a valid pointer to an array of @subpassCount@---     valid 'SubpassDescription' structures+-- -   #VUID-VkRenderPassCreateInfo-pSubpasses-parameter# @pSubpasses@+--     /must/ be a valid pointer to an array of @subpassCount@ valid+--     'SubpassDescription' structures ----- -   If @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid+-- -   #VUID-VkRenderPassCreateInfo-pDependencies-parameter# If+--     @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid --     pointer to an array of @dependencyCount@ valid 'SubpassDependency' --     structures ----- -   @subpassCount@ /must/ be greater than @0@+-- -   #VUID-VkRenderPassCreateInfo-subpassCount-arraylength#+--     @subpassCount@ /must/ be greater than @0@ -- -- = See Also --@@ -1924,27 +2024,34 @@ -- -- = Description ----- Applications /must/ ensure that all accesses to memory that backs image--- subresources used as attachments in a given renderpass instance either--- happen-before the+-- Other than the exceptions listed below, applications /must/ ensure that+-- all accesses to memory that backs image subresources used as attachments+-- in a given renderpass instance either happen-before the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops load operations> -- for those attachments, or happen-after the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-load-store-ops store operations> -- for those attachments. ----- For depth\/stencil attachments, each aspect /can/ be used separately as--- attachments and non-attachments as long as the non-attachment accesses--- are also via an image subresource in either the--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'--- layout or the--- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'--- layout, and the attachment resource uses whichever of those two layouts--- the image accesses do not. Use of non-attachment aspects in this case is--- only well defined if the attachment is used in the subpass where the--- non-attachment access is being made, or the layout of the image--- subresource is constant throughout the entire render pass instance,--- including the @initialLayout@ and @finalLayout@.+-- The exceptions to the general rule are: --+-- -   For depth\/stencil attachments, an aspect /can/ be used separately+--     as attachment and non-attachment if both accesses are read-only.+--+-- -   For depth\/stencil attachments, each aspect /can/ be used separately+--     as attachments and non-attachments as long as the non-attachment+--     accesses are also via an image subresource in either the+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'+--     layout or the+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'+--     layout, and the attachment resource uses whichever of those two+--     layouts the image accesses do not.+--+-- Use of non-attachment aspects in these cases is only well defined if the+-- attachment is used in the subpass where the non-attachment access is+-- being made, or the layout of the image subresource is constant+-- throughout the entire render pass instance, including the+-- @initialLayout@ and @finalLayout@.+-- -- Note -- -- These restrictions mean that the render pass has full knowledge of all@@ -1969,83 +2076,96 @@ -- -- == Valid Usage ----- -   @attachmentCount@ /must/ be equal to the attachment count specified+-- -   #VUID-VkFramebufferCreateInfo-attachmentCount-00876#+--     @attachmentCount@ /must/ be equal to the attachment count specified --     in @renderPass@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-02778# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     and @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid --     pointer to an array of @attachmentCount@ valid --     'Vulkan.Core10.Handles.ImageView' handles ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00877# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is used as a color attachment or --     resolve attachment by @renderPass@ /must/ have been created with a --     @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT' ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02633# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is used as a depth\/stencil --     attachment by @renderPass@ /must/ have been created with a @usage@ --     value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02634# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is used as a depth\/stencil --     resolve attachment by @renderPass@ /must/ have been created with a --     @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00879# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is used as an input attachment --     by @renderPass@ /must/ have been created with a @usage@ value --     including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' ----- -   Each element of @pAttachments@ that is used as a fragment density---     map attachment by @renderPass@ /must/ not have been created with a---     @flags@ value including+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02552# Each element of+--     @pAttachments@ that is used as a fragment density map attachment by+--     @renderPass@ /must/ not have been created with a @flags@ value+--     including --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT' ----- -   If @renderPass@ has a fragment density map attachment and+-- -   #VUID-VkFramebufferCreateInfo-renderPass-02553# If @renderPass@ has+--     a fragment density map attachment and --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMapNonSubsampledImages non-subsample image feature> --     is not enabled, each element of @pAttachments@ /must/ have been --     created with a @flags@ value including --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT' --     unless that element is the fragment density map attachment ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00880# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ /must/ have been created with a --     'Vulkan.Core10.Enums.Format.Format' value that matches the --     'Vulkan.Core10.Enums.Format.Format' specified by the corresponding --     'AttachmentDescription' in @renderPass@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00881# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ /must/ have been created with a --     @samples@ value that matches the @samples@ value specified by the --     corresponding 'AttachmentDescription' in @renderPass@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04533# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is used as an input, color, --     resolve, or depth\/stencil attachment by @renderPass@ /must/ have --     been created with a VkImageCreateInfo::@width@ greater than or equal --     to @width@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04534# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is used as an input, color, --     resolve, or depth\/stencil attachment by @renderPass@ /must/ have --     been created with a VkImageCreateInfo::@height@ greater than or --     equal to @height@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04535# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is used as an input, color, --     resolve, or depth\/stencil attachment by @renderPass@ /must/ have@@ -2053,38 +2173,41 @@ --     VkImageViewCreateInfo::@subresourceRange.pname@:layerCount greater --     than or equal to @layers@ ----- -   If @renderPass@ was specified with non-zero view masks, each element---     of @pAttachments@ that is used as an input, color, resolve, or---     depth\/stencil attachment by @renderPass@ /must/ have a @layerCount@---     greater than the index of the most significant bit set in any of---     those view masks+-- -   #VUID-VkFramebufferCreateInfo-renderPass-04536# If @renderPass@ was+--     specified with non-zero view masks, each element of @pAttachments@+--     that is used as an input, color, resolve, or depth\/stencil+--     attachment by @renderPass@ /must/ have a @layerCount@ greater than+--     the index of the most significant bit set in any of those view masks ----- -   If @renderPass@ was specified with non-zero view masks, each element---     of @pAttachments@ that is referenced by---     @fragmentDensityMapAttachment@ /must/ have a @layerCount@ equal to---     @1@ or greater than the index of the most significant bit set in any---     of those view masks+-- -   #VUID-VkFramebufferCreateInfo-renderPass-02746# If @renderPass@ was+--     specified with non-zero view masks, each element of @pAttachments@+--     that is referenced by @fragmentDensityMapAttachment@ /must/ have a+--     @layerCount@ equal to @1@ or greater than the index of the most+--     significant bit set in any of those view masks ----- -   If @renderPass@ was not specified with non-zero view masks, each---     element of @pAttachments@ that is referenced by---     @fragmentDensityMapAttachment@ /must/ have a @layerCount@ equal to---     @1@+-- -   #VUID-VkFramebufferCreateInfo-renderPass-02747# If @renderPass@ was+--     not specified with non-zero view masks, each element of+--     @pAttachments@ that is referenced by @fragmentDensityMapAttachment@+--     /must/ have a @layerCount@ equal to @1@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02555# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     an element of @pAttachments@ that is referenced by --     @fragmentDensityMapAttachment@ /must/ have a width at least as large --     as --     \(\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil\) ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-02556# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     an element of @pAttachments@ that is referenced by --     @fragmentDensityMapAttachment@ /must/ have a height at least as --     large as --     \(\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil\) ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04537# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     and @renderPass@ was specified with non-zero view masks, each --     element of @pAttachments@ that is used as a@@ -2093,7 +2216,8 @@ --     greater than the index of the most significant bit set in any of --     those view masks ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04538# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     and @renderPass@ was not specified with non-zero view masks, each --     element of @pAttachments@ that is used as a@@ -2101,7 +2225,8 @@ --     by @renderPass@ /must/ have a @layerCount@ that is either @1@, or --     greater than @layers@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04539# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     an element of @pAttachments@ that is used as a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment>@@ -2111,7 +2236,8 @@ --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' --     which references that attachment ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04540# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     an element of @pAttachments@ that is used as a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment>@@ -2121,57 +2247,66 @@ --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' --     which references that attachment ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00883# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ /must/ only specify a single mip --     level ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00884# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ /must/ have been created with the --     identity swizzle ----- -   @width@ /must/ be greater than @0@+-- -   #VUID-VkFramebufferCreateInfo-width-00885# @width@ /must/ be greater+--     than @0@ ----- -   @width@ /must/ be less than or equal to+-- -   #VUID-VkFramebufferCreateInfo-width-00886# @width@ /must/ be less+--     than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferWidth@ ----- -   @height@ /must/ be greater than @0@+-- -   #VUID-VkFramebufferCreateInfo-height-00887# @height@ /must/ be+--     greater than @0@ ----- -   @height@ /must/ be less than or equal to+-- -   #VUID-VkFramebufferCreateInfo-height-00888# @height@ /must/ be less+--     than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferHeight@ ----- -   @layers@ /must/ be greater than @0@+-- -   #VUID-VkFramebufferCreateInfo-layers-00889# @layers@ /must/ be+--     greater than @0@ ----- -   @layers@ /must/ be less than or equal to+-- -   #VUID-VkFramebufferCreateInfo-layers-00890# @layers@ /must/ be less+--     than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@ ----- -   If @renderPass@ was specified with non-zero view masks, @layers@---     /must/ be @1@+-- -   #VUID-VkFramebufferCreateInfo-renderPass-02531# If @renderPass@ was+--     specified with non-zero view masks, @layers@ /must/ be @1@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-pAttachments-00891# If @flags@ does+--     not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is a 2D or 2D array image view --     taken from a 3D image /must/ not be a depth\/stencil format ----- -   If the+-- -   #VUID-VkFramebufferCreateInfo-flags-03189# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-imagelessFramebuffer imageless framebuffer> --     feature is not enabled, @flags@ /must/ not include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT' ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03190# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @pNext@ chain /must/ include an instance of --     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR' ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03191# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @attachmentImageInfoCount@ member of an instance of --     'Vulkan.Extensions.VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfoKHR' --     in the @pNext@ chain /must/ be equal to either zero or --     @attachmentCount@ ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-04541# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @width@ member of any element of the @pAttachmentImageInfos@ --     member of an instance of@@ -2180,7 +2315,7 @@ --     depth\/stencil attachment in @pRenderPass@ /must/ be greater than or --     equal to @width@ ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-04542# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @height@ member of any element of the @pAttachmentImageInfos@ --     member of an instance of@@ -2189,7 +2324,7 @@ --     depth\/stencil attachment in @pRenderPass@ /must/ be greater than or --     equal to @height@ ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03196# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @width@ member of any element of the @pAttachmentImageInfos@ --     member of an instance of@@ -2199,7 +2334,7 @@ --     in @renderPass@ /must/ be greater than or equal to --     \(\left\lceil{\frac{width}{maxFragmentDensityTexelSize_{width}}}\right\rceil\) ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03197# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @height@ member of any element of the @pAttachmentImageInfos@ --     member of a@@ -2209,7 +2344,7 @@ --     in @renderPass@ /must/ be greater than or equal to --     \(\left\lceil{\frac{height}{maxFragmentDensityTexelSize_{height}}}\right\rceil\) ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-04543# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @width@ member of any element of the @pAttachmentImageInfos@ --     member of an instance of@@ -2222,7 +2357,7 @@ --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' --     which references that attachment ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-04544# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @height@ member of any element of the @pAttachmentImageInfos@ --     member of an instance of@@ -2235,7 +2370,7 @@ --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' --     which references that attachment ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-04545# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @layerCount@ member of any element of the --     @pAttachmentImageInfos@ member of an instance of@@ -2244,7 +2379,8 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment fragment shading rate attachment> --     /must/ be either @1@, or greater than or equal to @layers@ ----- -   If multiview is enabled for @renderPass@, and @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-renderPass-03198# If multiview is+--     enabled for @renderPass@, and @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @layerCount@ member of any element of the --     @pAttachmentImageInfos@ member of a@@ -2254,7 +2390,8 @@ --     greater than the maximum bit index set in the view mask in the --     subpasses in which it is used in @renderPass@ ----- -   If multiview is not enabled for @renderPass@, and @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-renderPass-04546# If multiview is not+--     enabled for @renderPass@, and @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @layerCount@ member of any element of the --     @pAttachmentImageInfos@ member of a@@ -2263,7 +2400,7 @@ --     resolve, or depth\/stencil attachment in @pRenderPass@ /must/ be --     greater than or equal to @layers@ ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03201# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @usage@ member of any element of the @pAttachmentImageInfos@ --     member of a@@ -2273,7 +2410,7 @@ --     /must/ include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT' ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03202# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @usage@ member of any element of the @pAttachmentImageInfos@ --     member of a@@ -2282,7 +2419,7 @@ --     used as a depth\/stencil attachment by @renderPass@ /must/ include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03203# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @usage@ member of any element of the @pAttachmentImageInfos@ --     member of a@@ -2292,7 +2429,7 @@ --     include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03204# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @usage@ member of any element of the @pAttachmentImageInfos@ --     member of a@@ -2301,7 +2438,7 @@ --     used as an input attachment by @renderPass@ /must/ include --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-03205# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     at least one element of the @pViewFormats@ member of any element of --     the @pAttachmentImageInfos@ member of a@@ -2310,20 +2447,22 @@ --     corresponding value of 'AttachmentDescription'::@format@ used to --     create @renderPass@ ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04113# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ /must/ have been created with --     'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@viewType@ not equal --     to 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D' ----- -   If @flags@ does not include+-- -   #VUID-VkFramebufferCreateInfo-flags-04548# If @flags@ does not+--     include --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     each element of @pAttachments@ that is used as a fragment shading --     rate attachment by @renderPass@ /must/ have been created with a --     @usage@ value including --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' ----- -   If @flags@ includes+-- -   #VUID-VkFramebufferCreateInfo-flags-04549# If @flags@ includes --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FRAMEBUFFER_CREATE_IMAGELESS_BIT', --     the @usage@ member of any element of the @pAttachmentImageInfos@ --     member of a@@ -2335,25 +2474,28 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFramebufferCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkFramebufferCreateInfo-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.FramebufferAttachmentsCreateInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkFramebufferCreateInfo-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkFramebufferCreateInfo-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.FramebufferCreateFlagBits.FramebufferCreateFlagBits' --     values ----- -   @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'---     handle+-- -   #VUID-VkFramebufferCreateInfo-renderPass-parameter# @renderPass@+--     /must/ be a valid 'Vulkan.Core10.Handles.RenderPass' handle ----- -   Both of @renderPass@, and the elements of @pAttachments@ that are---     valid handles of non-ignored parameters /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkFramebufferCreateInfo-commonparent# Both of @renderPass@,+--     and the elements of @pAttachments@ that are valid handles of+--     non-ignored parameters /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- = See Also --
src/Vulkan/Core10/Pipeline.hs view
@@ -156,3799 +156,4111 @@ import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags (PipelineDepthStencilStateCreateFlags) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_discard_rectangles (PipelineDiscardRectangleStateCreateInfoEXT) import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags)-import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PipelineFragmentShadingRateStateCreateInfoKHR)-import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags)-import Vulkan.Core10.Handles (PipelineLayout)-import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags)-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conservative_rasterization (PipelineRasterizationConservativeStateCreateInfoEXT)-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PipelineRasterizationDepthClipStateCreateInfoEXT)-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PipelineRasterizationLineStateCreateInfoEXT)-import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags)-import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD)-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV)-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT)-import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT)-import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)-import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags)-import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PipelineVertexInputDivisorStateCreateInfoEXT)-import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags)-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportCoarseSampleOrderStateCreateInfoNV)-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PipelineViewportExclusiveScissorStateCreateInfoNV)-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportShadingRateImageStateCreateInfoNV)-import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags)-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)-import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)-import Vulkan.CStruct.Extends (PokeChain)-import Vulkan.CStruct.Extends (PokeChain(..))-import Vulkan.Core10.Enums.PolygonMode (PolygonMode)-import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology)-import Vulkan.Core10.FundamentalTypes (Rect2D)-import Vulkan.Core10.Handles (RenderPass)-import Vulkan.Core10.Enums.Result (Result)-import Vulkan.Core10.Enums.Result (Result(..))-import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)-import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(SampleCountFlagBits))-import Vulkan.Core10.FundamentalTypes (SampleMask)-import Vulkan.Core10.Handles (ShaderModule)-import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)-import Vulkan.CStruct.Extends (SomeStruct)-import Vulkan.CStruct.Extends (SomeStruct(..))-import Vulkan.Core10.Enums.StencilOp (StencilOp)-import Vulkan.Core10.Enums.StructureType (StructureType)-import Vulkan.CStruct (ToCStruct)-import Vulkan.CStruct (ToCStruct(..))-import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate)-import Vulkan.Exception (VulkanException(..))-import Vulkan.Zero (Zero(..))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO))-import Vulkan.Core10.Enums.Result (Result(SUCCESS))-import Vulkan.Core10.Enums.BlendFactor (BlendFactor(..))-import Vulkan.Core10.Enums.BlendOp (BlendOp(..))-import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlagBits(..))-import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlags)-import Vulkan.Core10.Enums.CompareOp (CompareOp(..))-import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlagBits(..))-import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)-import Vulkan.Core10.Enums.DynamicState (DynamicState(..))-import Vulkan.Core10.Enums.FrontFace (FrontFace(..))-import Vulkan.Core10.Enums.LogicOp (LogicOp(..))-import Vulkan.Core10.Handles (Pipeline(..))-import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags (PipelineColorBlendStateCreateFlags(..))-import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(..))-import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)-import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags (PipelineDepthStencilStateCreateFlags(..))-import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags(..))-import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags(..))-import Vulkan.Core10.Enums.PipelineLayoutCreateFlags (PipelineLayoutCreateFlags(..))-import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags(..))-import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags(..))-import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlagBits(..))-import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)-import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags(..))-import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags(..))-import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags(..))-import Vulkan.Core10.Enums.PolygonMode (PolygonMode(..))-import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology(..))-import Vulkan.Core10.FundamentalTypes (SampleMask)-import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(..))-import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)-import Vulkan.Core10.Enums.StencilOp (StencilOp(..))-import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate(..))-foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCreateGraphicsPipelines-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct GraphicsPipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct GraphicsPipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result---- | vkCreateGraphicsPipelines - Create graphics pipelines------ = Description------ The 'GraphicsPipelineCreateInfo' structure includes an array of shader--- create info structures containing all the desired active shader stages,--- as well as creation info to define all relevant fixed-function stages,--- and a pipeline layout.------ == Valid Usage------ -   If the @flags@ member of any element of @pCreateInfos@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and the @basePipelineIndex@ member of that same element is not---     @-1@, @basePipelineIndex@ /must/ be less than the index into---     @pCreateInfos@ that corresponds to that element------ -   If the @flags@ member of any element of @pCreateInfos@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, the base pipeline /must/ have been created with the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'---     flag set------ -   If @pipelineCache@ was created with---     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',---     host access to @pipelineCache@ /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>------ Note------ An implicit cache may be provided by the implementation or a layer. For--- this reason, it is still valid to set--- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'--- on @flags@ for any element of @pCreateInfos@ while passing--- 'Vulkan.Core10.APIConstants.NULL_HANDLE' for @pipelineCache@.------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @pipelineCache@ /must/ be a valid---     'Vulkan.Core10.Handles.PipelineCache' handle------ -   @pCreateInfos@ /must/ be a valid pointer to an array of---     @createInfoCount@ valid 'GraphicsPipelineCreateInfo' structures------ -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure------ -   @pPipelines@ /must/ be a valid pointer to an array of---     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles------ -   @createInfoCount@ /must/ be greater than @0@------ -   If @pipelineCache@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'------ = See Also------ 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',--- 'Vulkan.Core10.Handles.Device', 'GraphicsPipelineCreateInfo',--- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'-createGraphicsPipelines :: forall io-                         . (MonadIO io)-                        => -- | @device@ is the logical device that creates the graphics pipelines.-                           Device-                        -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',-                           -- indicating that pipeline caching is disabled; or the handle of a valid-                           -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>-                           -- object, in which case use of that cache is enabled for the duration of-                           -- the command.-                           PipelineCache-                        -> -- | @pCreateInfos@ is a pointer to an array of 'GraphicsPipelineCreateInfo'-                           -- structures.-                           ("createInfos" ::: Vector (SomeStruct GraphicsPipelineCreateInfo))-                        -> -- | @pAllocator@ controls host memory allocation as described in the-                           -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>-                           -- chapter.-                           ("allocator" ::: Maybe AllocationCallbacks)-                        -> io (Result, ("pipelines" ::: Vector Pipeline))-createGraphicsPipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do-  let vkCreateGraphicsPipelinesPtr = pVkCreateGraphicsPipelines (deviceCmds (device :: Device))-  lift $ unless (vkCreateGraphicsPipelinesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateGraphicsPipelines is null" Nothing Nothing-  let vkCreateGraphicsPipelines' = mkVkCreateGraphicsPipelines vkCreateGraphicsPipelinesPtr-  pPCreateInfos <- ContT $ allocaBytesAligned @(GraphicsPipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 144) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (144 * (i)) :: Ptr (GraphicsPipelineCreateInfo _))) (e) . ($ ())) (createInfos)-  pAllocator <- case (allocator) of-    Nothing -> pure nullPtr-    Just j -> ContT $ withCStruct (j)-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free-  r <- lift $ vkCreateGraphicsPipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))-  pure $ (r, pPipelines)---- | A convenience wrapper to make a compatible pair of calls to--- 'createGraphicsPipelines' and 'destroyPipeline'------ To ensure that 'destroyPipeline' is always called: pass--- 'Control.Exception.bracket' (or the allocate function from your--- favourite resource management library) as the first argument.--- To just extract the pair pass '(,)' as the first argument.----withGraphicsPipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct GraphicsPipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r-withGraphicsPipelines device pipelineCache pCreateInfos pAllocator b =-  b (createGraphicsPipelines device pipelineCache pCreateInfos pAllocator)-    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCreateComputePipelines-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ComputePipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ComputePipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result---- | vkCreateComputePipelines - Creates a new compute pipeline object------ == Valid Usage------ -   If the @flags@ member of any element of @pCreateInfos@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and the @basePipelineIndex@ member of that same element is not---     @-1@, @basePipelineIndex@ /must/ be less than the index into---     @pCreateInfos@ that corresponds to that element------ -   If the @flags@ member of any element of @pCreateInfos@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, the base pipeline /must/ have been created with the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'---     flag set------ -   If @pipelineCache@ was created with---     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',---     host access to @pipelineCache@ /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @pipelineCache@ /must/ be a valid---     'Vulkan.Core10.Handles.PipelineCache' handle------ -   @pCreateInfos@ /must/ be a valid pointer to an array of---     @createInfoCount@ valid 'ComputePipelineCreateInfo' structures------ -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure------ -   @pPipelines@ /must/ be a valid pointer to an array of---     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles------ -   @createInfoCount@ /must/ be greater than @0@------ -   If @pipelineCache@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'------ = See Also------ 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',--- 'ComputePipelineCreateInfo', 'Vulkan.Core10.Handles.Device',--- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'-createComputePipelines :: forall io-                        . (MonadIO io)-                       => -- | @device@ is the logical device that creates the compute pipelines.-                          Device-                       -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',-                          -- indicating that pipeline caching is disabled; or the handle of a valid-                          -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>-                          -- object, in which case use of that cache is enabled for the duration of-                          -- the command.-                          PipelineCache-                       -> -- | @pCreateInfos@ is a pointer to an array of 'ComputePipelineCreateInfo'-                          -- structures.-                          ("createInfos" ::: Vector (SomeStruct ComputePipelineCreateInfo))-                       -> -- | @pAllocator@ controls host memory allocation as described in the-                          -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>-                          -- chapter.-                          ("allocator" ::: Maybe AllocationCallbacks)-                       -> io (Result, ("pipelines" ::: Vector Pipeline))-createComputePipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do-  let vkCreateComputePipelinesPtr = pVkCreateComputePipelines (deviceCmds (device :: Device))-  lift $ unless (vkCreateComputePipelinesPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateComputePipelines is null" Nothing Nothing-  let vkCreateComputePipelines' = mkVkCreateComputePipelines vkCreateComputePipelinesPtr-  pPCreateInfos <- ContT $ allocaBytesAligned @(ComputePipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 96) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (96 * (i)) :: Ptr (ComputePipelineCreateInfo _))) (e) . ($ ())) (createInfos)-  pAllocator <- case (allocator) of-    Nothing -> pure nullPtr-    Just j -> ContT $ withCStruct (j)-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free-  r <- lift $ vkCreateComputePipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))-  pure $ (r, pPipelines)---- | A convenience wrapper to make a compatible pair of calls to--- 'createComputePipelines' and 'destroyPipeline'------ To ensure that 'destroyPipeline' is always called: pass--- 'Control.Exception.bracket' (or the allocate function from your--- favourite resource management library) as the first argument.--- To just extract the pair pass '(,)' as the first argument.----withComputePipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct ComputePipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r-withComputePipelines device pipelineCache pCreateInfos pAllocator b =-  b (createComputePipelines device pipelineCache pCreateInfos pAllocator)-    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkDestroyPipeline-  :: FunPtr (Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()---- | vkDestroyPipeline - Destroy a pipeline object------ == Valid Usage------ -   All submitted commands that refer to @pipeline@ /must/ have---     completed execution------ -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were---     provided when @pipeline@ was created, a compatible set of callbacks---     /must/ be provided here------ -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were---     provided when @pipeline@ was created, @pAllocator@ /must/ be @NULL@------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   If @pipeline@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle------ -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure------ -   If @pipeline@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@------ == Host Synchronization------ -   Host access to @pipeline@ /must/ be externally synchronized------ = See Also------ 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',--- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'-destroyPipeline :: forall io-                 . (MonadIO io)-                => -- | @device@ is the logical device that destroys the pipeline.-                   Device-                -> -- | @pipeline@ is the handle of the pipeline to destroy.-                   Pipeline-                -> -- | @pAllocator@ controls host memory allocation as described in the-                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>-                   -- chapter.-                   ("allocator" ::: Maybe AllocationCallbacks)-                -> io ()-destroyPipeline device pipeline allocator = liftIO . evalContT $ do-  let vkDestroyPipelinePtr = pVkDestroyPipeline (deviceCmds (device :: Device))-  lift $ unless (vkDestroyPipelinePtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyPipeline is null" Nothing Nothing-  let vkDestroyPipeline' = mkVkDestroyPipeline vkDestroyPipelinePtr-  pAllocator <- case (allocator) of-    Nothing -> pure nullPtr-    Just j -> ContT $ withCStruct (j)-  lift $ vkDestroyPipeline' (deviceHandle (device)) (pipeline) pAllocator-  pure $ ()----- | VkViewport - Structure specifying a viewport------ = Description------ The framebuffer depth coordinate @z@f /may/ be represented using either--- a fixed-point or floating-point representation. However, a--- floating-point representation /must/ be used if the depth\/stencil--- attachment has a floating-point depth component. If an m-bit fixed-point--- representation is used, we assume that it represents each value--- \(\frac{k}{2^m - 1}\), where k ∈ { 0, 1, …​, 2m-1 }, as k (e.g. 1.0 is--- represented in binary as a string of all ones).------ The viewport parameters shown in the above equations are found from--- these values as------ -   ox = @x@ + @width@ \/ 2------ -   oy = @y@ + @height@ \/ 2------ -   oz = @minDepth@------ -   px = @width@------ -   py = @height@------ -   pz = @maxDepth@ - @minDepth@.------ If a render pass transform is enabled, the values (px,py) and (ox, oy)--- defining the viewport are transformed as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>--- before participating in the viewport transform.------ The application /can/ specify a negative term for @height@, which has--- the effect of negating the y coordinate in clip space before performing--- the transform. When using a negative @height@, the application /should/--- also adjust the @y@ value to point to the lower left corner of the--- viewport instead of the upper left corner. Using the negative @height@--- allows the application to avoid having to negate the y component of the--- @Position@ output from the last vertex processing stage in shaders that--- also target other graphics APIs.------ The width and height of the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxViewportDimensions implementation-dependent maximum viewport dimensions>--- /must/ be greater than or equal to the width and height of the largest--- image which /can/ be created and attached to a framebuffer.------ The floating-point viewport bounds are represented with an--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-viewportSubPixelBits implementation-dependent precision>.------ == Valid Usage------ -   @width@ /must/ be greater than @0.0@------ -   @width@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[0]------ -   The absolute value of @height@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[1]------ -   @x@ /must/ be greater than or equal to @viewportBoundsRange@[0]------ -   (@x@ + @width@) /must/ be less than or equal to---     @viewportBoundsRange@[1]------ -   @y@ /must/ be greater than or equal to @viewportBoundsRange@[0]------ -   @y@ /must/ be less than or equal to @viewportBoundsRange@[1]------ -   (@y@ + @height@) /must/ be greater than or equal to---     @viewportBoundsRange@[0]------ -   (@y@ + @height@) /must/ be less than or equal to---     @viewportBoundsRange@[1]------ -   Unless @VK_EXT_depth_range_unrestricted@ extension is enabled---     @minDepth@ /must/ be between @0.0@ and @1.0@, inclusive------ -   Unless @VK_EXT_depth_range_unrestricted@ extension is enabled---     @maxDepth@ /must/ be between @0.0@ and @1.0@, inclusive------ = See Also------ 'PipelineViewportStateCreateInfo',--- 'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport',--- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'-data Viewport = Viewport-  { -- | @x@ and @y@ are the viewport’s upper left corner (x,y).-    x :: Float-  , -- No documentation found for Nested "VkViewport" "y"-    y :: Float-  , -- | @width@ and @height@ are the viewport’s width and height, respectively.-    width :: Float-  , -- No documentation found for Nested "VkViewport" "height"-    height :: Float-  , -- | @minDepth@ and @maxDepth@ are the depth range for the viewport. It is-    -- valid for @minDepth@ to be greater than or equal to @maxDepth@.-    minDepth :: Float-  , -- No documentation found for Nested "VkViewport" "maxDepth"-    maxDepth :: Float-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (Viewport)-#endif-deriving instance Show Viewport--instance ToCStruct Viewport where-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p Viewport{..} f = do-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (width))-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (height))-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (minDepth))-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxDepth))-    f-  cStructSize = 24-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))-    f--instance FromCStruct Viewport where-  peekCStruct p = do-    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))-    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))-    width <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))-    height <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))-    minDepth <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))-    maxDepth <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))-    pure $ Viewport-             ((\(CFloat a) -> a) x) ((\(CFloat a) -> a) y) ((\(CFloat a) -> a) width) ((\(CFloat a) -> a) height) ((\(CFloat a) -> a) minDepth) ((\(CFloat a) -> a) maxDepth)--instance Storable Viewport where-  sizeOf ~_ = 24-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero Viewport where-  zero = Viewport-           zero-           zero-           zero-           zero-           zero-           zero----- | VkSpecializationMapEntry - Structure specifying a specialization map--- entry------ = Description------ If a @constantID@ value is not a specialization constant ID used in the--- shader, that map entry does not affect the behavior of the pipeline.------ == Valid Usage------ -   For a @constantID@ specialization constant declared in a shader,---     @size@ /must/ match the byte size of the @constantID@. If the---     specialization constant is of type @boolean@, @size@ /must/ be the---     byte size of 'Vulkan.Core10.FundamentalTypes.Bool32'------ = See Also------ 'SpecializationInfo'-data SpecializationMapEntry = SpecializationMapEntry-  { -- | @constantID@ is the ID of the specialization constant in SPIR-V.-    constantID :: Word32-  , -- | @offset@ is the byte offset of the specialization constant value within-    -- the supplied data buffer.-    offset :: Word32-  , -- | @size@ is the byte size of the specialization constant value within the-    -- supplied data buffer.-    size :: Word64-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (SpecializationMapEntry)-#endif-deriving instance Show SpecializationMapEntry--instance ToCStruct SpecializationMapEntry where-  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p SpecializationMapEntry{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (constantID)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (offset)-    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (size))-    f-  cStructSize = 16-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (zero))-    f--instance FromCStruct SpecializationMapEntry where-  peekCStruct p = do-    constantID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))-    offset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    size <- peek @CSize ((p `plusPtr` 8 :: Ptr CSize))-    pure $ SpecializationMapEntry-             constantID offset ((\(CSize a) -> a) size)--instance Storable SpecializationMapEntry where-  sizeOf ~_ = 16-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero SpecializationMapEntry where-  zero = SpecializationMapEntry-           zero-           zero-           zero----- | VkSpecializationInfo - Structure specifying specialization info------ = Description------ @pMapEntries@ is a pointer to a 'SpecializationMapEntry' structure.------ == Valid Usage------ -   The @offset@ member of each element of @pMapEntries@ /must/ be less---     than @dataSize@------ -   The @size@ member of each element of @pMapEntries@ /must/ be less---     than or equal to @dataSize@ minus @offset@------ == Valid Usage (Implicit)------ -   If @mapEntryCount@ is not @0@, @pMapEntries@ /must/ be a valid---     pointer to an array of @mapEntryCount@ valid---     'SpecializationMapEntry' structures------ -   If @dataSize@ is not @0@, @pData@ /must/ be a valid pointer to an---     array of @dataSize@ bytes------ = See Also------ 'PipelineShaderStageCreateInfo', 'SpecializationMapEntry'-data SpecializationInfo = SpecializationInfo-  { -- | @pMapEntries@ is a pointer to an array of 'SpecializationMapEntry'-    -- structures which map constant IDs to offsets in @pData@.-    mapEntries :: Vector SpecializationMapEntry-  , -- | @dataSize@ is the byte size of the @pData@ buffer.-    dataSize :: Word64-  , -- | @pData@ contains the actual constant values to specialize with.-    data' :: Ptr ()-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (SpecializationInfo)-#endif-deriving instance Show SpecializationInfo--instance ToCStruct SpecializationInfo where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p SpecializationInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (mapEntries)) :: Word32))-    pPMapEntries' <- ContT $ allocaBytesAligned @SpecializationMapEntry ((Data.Vector.length (mapEntries)) * 16) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e) . ($ ())) (mapEntries)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')-    lift $ poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (dataSize))-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (data')-    lift $ f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    pPMapEntries' <- ContT $ allocaBytesAligned @SpecializationMapEntry ((Data.Vector.length (mempty)) * 16) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)-    lift $ f--instance FromCStruct SpecializationInfo where-  peekCStruct p = do-    mapEntryCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))-    pMapEntries <- peek @(Ptr SpecializationMapEntry) ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry)))-    pMapEntries' <- generateM (fromIntegral mapEntryCount) (\i -> peekCStruct @SpecializationMapEntry ((pMapEntries `advancePtrBytes` (16 * (i)) :: Ptr SpecializationMapEntry)))-    dataSize <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))-    pData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))-    pure $ SpecializationInfo-             pMapEntries' ((\(CSize a) -> a) dataSize) pData--instance Zero SpecializationInfo where-  zero = SpecializationInfo-           mempty-           zero-           zero----- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a--- newly created pipeline shader stage------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @stage@ /must/ not be---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @stage@ /must/ not be---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'---     or---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shader>---     feature is not enabled, @stage@ /must/ not be---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shader>---     feature is not enabled, @stage@ /must/ not be---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'------ -   @stage@ /must/ not be---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL_GRAPHICS',---     or 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL'------ -   @pName@ /must/ be the name of an @OpEntryPoint@ in @module@ with an---     execution model that matches @stage@------ -   If the identified entry point includes any variable in its interface---     that is declared with the @ClipDistance@ @BuiltIn@ decoration, that---     variable /must/ not have an array size greater than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxClipDistances@------ -   If the identified entry point includes any variable in its interface---     that is declared with the @CullDistance@ @BuiltIn@ decoration, that---     variable /must/ not have an array size greater than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCullDistances@------ -   If the identified entry point includes any variables in its---     interface that are declared with the @ClipDistance@ or---     @CullDistance@ @BuiltIn@ decoration, those variables /must/ not have---     array sizes which sum to more than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCombinedClipAndCullDistances@------ -   If the identified entry point includes any variable in its interface---     that is declared with the---     'Vulkan.Core10.FundamentalTypes.SampleMask' @BuiltIn@ decoration,---     that variable /must/ not have an array size greater than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSampleMaskWords@------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',---     the identified entry point /must/ not include any input variable in---     its interface that is decorated with @CullDistance@------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'---     or---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',---     and the identified entry point has an @OpExecutionMode@ instruction---     that specifies a patch size with @OutputVertices@, the patch size---     /must/ be greater than @0@ and less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',---     the identified entry point /must/ have an @OpExecutionMode@---     instruction that specifies a maximum output vertex count that is---     greater than @0@ and less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryOutputVertices@------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',---     the identified entry point /must/ have an @OpExecutionMode@---     instruction that specifies an invocation count that is greater than---     @0@ and less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryShaderInvocations@------ -   If @stage@ is a vertex processing stage, and the identified entry---     point writes to @Layer@ for any primitive, it /must/ write the same---     value to @Layer@ for all vertices of a given primitive------ -   If @stage@ is a vertex processing stage, and the identified entry---     point writes to @ViewportIndex@ for any primitive, it /must/ write---     the same value to @ViewportIndex@ for all vertices of a given---     primitive------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',---     the identified entry point /must/ not include any output variables---     in its interface decorated with @CullDistance@------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',---     and the identified entry point writes to @FragDepth@ in any---     execution path, it /must/ write to @FragDepth@ in all execution---     paths------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',---     and the identified entry point writes to @FragStencilRefEXT@ in any---     execution path, it /must/ write to @FragStencilRefEXT@ in all---     execution paths------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',---     the identified entry point /must/ have an @OpExecutionMode@---     instruction that specifies a maximum output vertex count,---     @OutputVertices@, that is greater than @0@ and less than or equal to---     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputVertices@------ -   If @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',---     the identified entry point /must/ have an @OpExecutionMode@---     instruction that specifies a maximum output primitive count,---     @OutputPrimitivesNV@, that is greater than @0@ and less than or---     equal to---     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputPrimitives@------ -   If @flags@ has the---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'---     flag set, the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>---     feature /must/ be enabled------ -   If @flags@ has the---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'---     flag set, the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-computeFullSubgroups computeFullSubgroups>---     feature /must/ be enabled------ -   If a---     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'---     structure is included in the @pNext@ chain, @flags@ /must/ not have---     the---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'---     flag set------ -   If a---     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'---     structure is included in the @pNext@ chain, the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>---     feature /must/ be enabled, and @stage@ /must/ be a valid bit---     specified in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-required-subgroup-size-stages requiredSubgroupSizeStages>------ -   If a---     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'---     structure is included in the @pNext@ chain and @stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT',---     the local workgroup size of the shader /must/ be less than or equal---     to the product of---     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'::@requiredSubgroupSize@---     and---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroups-per-workgroup maxComputeWorkgroupSubgroups>------ -   If a---     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'---     structure is included in the @pNext@ chain, and @flags@ has the---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'---     flag set, the local workgroup size in the X dimension of the---     pipeline /must/ be a multiple of---     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'::@requiredSubgroupSize@------ -   If @flags@ has both the---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'---     and---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'---     flags set, the local workgroup size in the X dimension of the---     pipeline /must/ be a multiple of---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>------ -   If @flags@ has the---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'---     flag set and @flags@ does not have the---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'---     flag set and no---     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'---     structure is included in the @pNext@ chain, the local workgroup size---     in the X dimension of the pipeline /must/ be a multiple of---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>------ -   The SPIR-V code that was used to create @module@ /must/ be valid as---     described by the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirv-spec Khronos SPIR-V Specification>---     after applying the specializations provided in---     @pSpecializationInfo@, if any, and then converting all---     specialization constants into fixed constants.------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'---     values------ -   @stage@ /must/ be a valid---     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value------ -   @module@ /must/ be a valid 'Vulkan.Core10.Handles.ShaderModule'---     handle------ -   @pName@ /must/ be a null-terminated UTF-8 string------ -   If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/---     be a valid pointer to a valid 'SpecializationInfo' structure------ = See Also------ 'ComputePipelineCreateInfo', 'GraphicsPipelineCreateInfo',--- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',--- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlags',--- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',--- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',--- 'Vulkan.Core10.Handles.ShaderModule',--- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits',--- 'SpecializationInfo', 'Vulkan.Core10.Enums.StructureType.StructureType'-data PipelineShaderStageCreateInfo (es :: [Type]) = PipelineShaderStageCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is a bitmask of-    -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'-    -- specifying how the pipeline shader stage will be generated.-    flags :: PipelineShaderStageCreateFlags-  , -- | @stage@ is a-    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value-    -- specifying a single pipeline stage.-    stage :: ShaderStageFlagBits-  , -- | @module@ is a 'Vulkan.Core10.Handles.ShaderModule' object containing the-    -- shader for this stage.-    module' :: ShaderModule-  , -- | @pName@ is a pointer to a null-terminated UTF-8 string specifying the-    -- entry point name of the shader for this stage.-    name :: ByteString-  , -- | @pSpecializationInfo@ is a pointer to a 'SpecializationInfo' structure,-    -- as described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-specialization-constants Specialization Constants>,-    -- or @NULL@.-    specializationInfo :: Maybe SpecializationInfo-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineShaderStageCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (PipelineShaderStageCreateInfo es)--instance Extensible PipelineShaderStageCreateInfo where-  extensibleType = STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO-  setNext x next = x{next = next}-  getNext PipelineShaderStageCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineShaderStageCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = Just f-    | otherwise = Nothing--instance (Extendss PipelineShaderStageCreateInfo es, PokeChain es) => ToCStruct (PipelineShaderStageCreateInfo es) where-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineShaderStageCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (stage)-    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (module')-    pName'' <- ContT $ useAsCString (name)-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''-    pSpecializationInfo'' <- case (specializationInfo) of-      Nothing -> pure nullPtr-      Just j -> ContT $ withCStruct (j)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo))) pSpecializationInfo''-    lift $ f-  cStructSize = 48-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (zero)-    pName'' <- ContT $ useAsCString (mempty)-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''-    lift $ f--instance (Extendss PipelineShaderStageCreateInfo es, PeekChain es) => FromCStruct (PipelineShaderStageCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineShaderStageCreateFlags ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags))-    stage <- peek @ShaderStageFlagBits ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits))-    module' <- peek @ShaderModule ((p `plusPtr` 24 :: Ptr ShaderModule))-    pName <- packCString =<< peek ((p `plusPtr` 32 :: Ptr (Ptr CChar)))-    pSpecializationInfo <- peek @(Ptr SpecializationInfo) ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo)))-    pSpecializationInfo' <- maybePeek (\j -> peekCStruct @SpecializationInfo (j)) pSpecializationInfo-    pure $ PipelineShaderStageCreateInfo-             next flags stage module' pName pSpecializationInfo'--instance es ~ '[] => Zero (PipelineShaderStageCreateInfo es) where-  zero = PipelineShaderStageCreateInfo-           ()-           zero-           zero-           zero-           mempty-           Nothing----- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly--- created compute pipeline------ = Description------ The parameters @basePipelineHandle@ and @basePipelineIndex@ are--- described in more detail in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.------ == Valid Usage------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be---     a valid handle to a compute 'Vulkan.Core10.Handles.Pipeline'------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineHandle@ is---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/---     be a valid index into the calling command’s @pCreateInfos@ parameter------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/---     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineHandle@ is not---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/---     be -1------ -   The @stage@ member of @stage@ /must/ be---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'------ -   The shader code for the entry point identified by @stage@ and the---     rest of the state identified by this structure /must/ adhere to the---     pipeline linking rules described in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>---     chapter------ -   @layout@ /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>---     with the layout of the compute shader specified in @stage@------ -   The number of resources in @layout@ accessible to the compute shader---     stage /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>---     feature is not enabled, @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'---     or---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMPUTE_PIPELINE_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---     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD'---     or---     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'---     values------ -   @stage@ /must/ be a valid 'PipelineShaderStageCreateInfo' structure------ -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'---     handle------ -   Both of @basePipelineHandle@, and @layout@ that are valid handles of---     non-ignored parameters /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Core10.Handles.Pipeline',--- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',--- 'Vulkan.Core10.Handles.PipelineLayout', 'PipelineShaderStageCreateInfo',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'createComputePipelines'-data ComputePipelineCreateInfo (es :: [Type]) = ComputePipelineCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is a bitmask of-    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'-    -- specifying how the pipeline will be generated.-    flags :: PipelineCreateFlags-  , -- | @stage@ is a 'PipelineShaderStageCreateInfo' structure describing the-    -- compute shader.-    stage :: SomeStruct PipelineShaderStageCreateInfo-  , -- | @layout@ is the description of binding locations used by both the-    -- pipeline and descriptor sets used with the pipeline.-    layout :: PipelineLayout-  , -- | @basePipelineHandle@ is a pipeline to derive from-    basePipelineHandle :: Pipeline-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use-    -- as a pipeline to derive from-    basePipelineIndex :: Int32-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ComputePipelineCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (ComputePipelineCreateInfo es)--instance Extensible ComputePipelineCreateInfo where-  extensibleType = STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO-  setNext x next = x{next = next}-  getNext ComputePipelineCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ComputePipelineCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f-    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f-    | otherwise = Nothing--instance (Extendss ComputePipelineCreateInfo es, PokeChain es) => ToCStruct (ComputePipelineCreateInfo es) where-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ComputePipelineCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)-    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) (stage) . ($ ())-    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (layout)-    lift $ poke ((p `plusPtr` 80 :: Ptr Pipeline)) (basePipelineHandle)-    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (basePipelineIndex)-    lift $ f-  cStructSize = 96-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) ((SomeStruct zero)) . ($ ())-    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (zero)-    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (zero)-    lift $ f--instance (Extendss ComputePipelineCreateInfo es, PeekChain es) => FromCStruct (ComputePipelineCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))-    stage <- peekSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo a))))-    layout <- peek @PipelineLayout ((p `plusPtr` 72 :: Ptr PipelineLayout))-    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 80 :: Ptr Pipeline))-    basePipelineIndex <- peek @Int32 ((p `plusPtr` 88 :: Ptr Int32))-    pure $ ComputePipelineCreateInfo-             next flags stage layout basePipelineHandle basePipelineIndex--instance es ~ '[] => Zero (ComputePipelineCreateInfo es) where-  zero = ComputePipelineCreateInfo-           ()-           zero-           (SomeStruct zero)-           zero-           zero-           zero----- | VkVertexInputBindingDescription - Structure specifying vertex input--- binding description------ == Valid Usage------ -   @binding@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@------ -   @stride@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@------ -   If the @VK_KHR_portability_subset@ extension is enabled, @stride@---     /must/ be a multiple of, and at least as large as,---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetPropertiesKHR'::@minVertexInputBindingStrideAlignment@.------ == Valid Usage (Implicit)------ -   @inputRate@ /must/ be a valid---     'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate' value------ = See Also------ 'PipelineVertexInputStateCreateInfo',--- 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'-data VertexInputBindingDescription = VertexInputBindingDescription-  { -- | @binding@ is the binding number that this structure describes.-    binding :: Word32-  , -- | @stride@ is the distance in bytes between two consecutive elements-    -- within the buffer.-    stride :: Word32-  , -- | @inputRate@ is a 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'-    -- value specifying whether vertex attribute addressing is a function of-    -- the vertex index or of the instance index.-    inputRate :: VertexInputRate-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (VertexInputBindingDescription)-#endif-deriving instance Show VertexInputBindingDescription--instance ToCStruct VertexInputBindingDescription where-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p VertexInputBindingDescription{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (stride)-    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (inputRate)-    f-  cStructSize = 12-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (zero)-    f--instance FromCStruct VertexInputBindingDescription where-  peekCStruct p = do-    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))-    stride <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    inputRate <- peek @VertexInputRate ((p `plusPtr` 8 :: Ptr VertexInputRate))-    pure $ VertexInputBindingDescription-             binding stride inputRate--instance Storable VertexInputBindingDescription where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero VertexInputBindingDescription where-  zero = VertexInputBindingDescription-           zero-           zero-           zero----- | VkVertexInputAttributeDescription - Structure specifying vertex input--- attribute description------ == Valid Usage------ -   @location@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@------ -   @binding@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@------ -   @offset@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributeOffset@------ -   @format@ /must/ be allowed as a vertex buffer format, as specified---     by the---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_VERTEX_BUFFER_BIT'---     flag in---     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@---     returned by---     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'------ -   If the @VK_KHR_portability_subset@ extension is enabled, and---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@vertexAttributeAccessBeyondStride@---     is 'Vulkan.Core10.FundamentalTypes.FALSE', the sum of @offset@ plus---     the size of the vertex attribute data described by @format@ /must/---     not be greater than @stride@ in the 'VertexInputBindingDescription'---     referenced in @binding@.------ == Valid Usage (Implicit)------ -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value------ = See Also------ 'Vulkan.Core10.Enums.Format.Format',--- 'PipelineVertexInputStateCreateInfo'-data VertexInputAttributeDescription = VertexInputAttributeDescription-  { -- | @location@ is the shader binding location number for this attribute.-    location :: Word32-  , -- | @binding@ is the binding number which this attribute takes its data-    -- from.-    binding :: Word32-  , -- | @format@ is the size and type of the vertex attribute data.-    format :: Format-  , -- | @offset@ is a byte offset of this attribute relative to the start of an-    -- element in the vertex input binding.-    offset :: Word32-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (VertexInputAttributeDescription)-#endif-deriving instance Show VertexInputAttributeDescription--instance ToCStruct VertexInputAttributeDescription where-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p VertexInputAttributeDescription{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (location)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (binding)-    poke ((p `plusPtr` 8 :: Ptr Format)) (format)-    poke ((p `plusPtr` 12 :: Ptr Word32)) (offset)-    f-  cStructSize = 16-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 8 :: Ptr Format)) (zero)-    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)-    f--instance FromCStruct VertexInputAttributeDescription where-  peekCStruct p = do-    location <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))-    binding <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    format <- peek @Format ((p `plusPtr` 8 :: Ptr Format))-    offset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))-    pure $ VertexInputAttributeDescription-             location binding format offset--instance Storable VertexInputAttributeDescription where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero VertexInputAttributeDescription where-  zero = VertexInputAttributeDescription-           zero-           zero-           zero-           zero----- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters--- of a newly created pipeline vertex input state------ == Valid Usage------ -   @vertexBindingDescriptionCount@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@------ -   @vertexAttributeDescriptionCount@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@------ -   For every @binding@ specified by each element of---     @pVertexAttributeDescriptions@, a 'VertexInputBindingDescription'---     /must/ exist in @pVertexBindingDescriptions@ with the same value of---     @binding@------ -   All elements of @pVertexBindingDescriptions@ /must/ describe---     distinct binding numbers------ -   All elements of @pVertexAttributeDescriptions@ /must/ describe---     distinct attribute locations------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PipelineVertexInputDivisorStateCreateInfoEXT'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be @0@------ -   If @vertexBindingDescriptionCount@ is not @0@,---     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array---     of @vertexBindingDescriptionCount@ valid---     'VertexInputBindingDescription' structures------ -   If @vertexAttributeDescriptionCount@ is not @0@,---     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array---     of @vertexAttributeDescriptionCount@ valid---     'VertexInputAttributeDescription' structures------ = See Also------ 'GraphicsPipelineCreateInfo',--- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',--- 'Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags.PipelineVertexInputStateCreateFlags',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'VertexInputAttributeDescription', 'VertexInputBindingDescription'-data PipelineVertexInputStateCreateInfo (es :: [Type]) = PipelineVertexInputStateCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is reserved for future use.-    flags :: PipelineVertexInputStateCreateFlags-  , -- | @pVertexBindingDescriptions@ is a pointer to an array of-    -- 'VertexInputBindingDescription' structures.-    vertexBindingDescriptions :: Vector VertexInputBindingDescription-  , -- | @pVertexAttributeDescriptions@ is a pointer to an array of-    -- 'VertexInputAttributeDescription' structures.-    vertexAttributeDescriptions :: Vector VertexInputAttributeDescription-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineVertexInputStateCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (PipelineVertexInputStateCreateInfo es)--instance Extensible PipelineVertexInputStateCreateInfo where-  extensibleType = STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO-  setNext x next = x{next = next}-  getNext PipelineVertexInputStateCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineVertexInputStateCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @PipelineVertexInputDivisorStateCreateInfoEXT = Just f-    | otherwise = Nothing--instance (Extendss PipelineVertexInputStateCreateInfo es, PokeChain es) => ToCStruct (PipelineVertexInputStateCreateInfo es) where-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineVertexInputStateCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexBindingDescriptions)) :: Word32))-    pPVertexBindingDescriptions' <- ContT $ allocaBytesAligned @VertexInputBindingDescription ((Data.Vector.length (vertexBindingDescriptions)) * 12) 4-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e) . ($ ())) (vertexBindingDescriptions)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexAttributeDescriptions)) :: Word32))-    pPVertexAttributeDescriptions' <- ContT $ allocaBytesAligned @VertexInputAttributeDescription ((Data.Vector.length (vertexAttributeDescriptions)) * 16) 4-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e) . ($ ())) (vertexAttributeDescriptions)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')-    lift $ f-  cStructSize = 48-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    pPVertexBindingDescriptions' <- ContT $ allocaBytesAligned @VertexInputBindingDescription ((Data.Vector.length (mempty)) * 12) 4-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')-    pPVertexAttributeDescriptions' <- ContT $ allocaBytesAligned @VertexInputAttributeDescription ((Data.Vector.length (mempty)) * 16) 4-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')-    lift $ f--instance (Extendss PipelineVertexInputStateCreateInfo es, PeekChain es) => FromCStruct (PipelineVertexInputStateCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineVertexInputStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags))-    vertexBindingDescriptionCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    pVertexBindingDescriptions <- peek @(Ptr VertexInputBindingDescription) ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription)))-    pVertexBindingDescriptions' <- generateM (fromIntegral vertexBindingDescriptionCount) (\i -> peekCStruct @VertexInputBindingDescription ((pVertexBindingDescriptions `advancePtrBytes` (12 * (i)) :: Ptr VertexInputBindingDescription)))-    vertexAttributeDescriptionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))-    pVertexAttributeDescriptions <- peek @(Ptr VertexInputAttributeDescription) ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription)))-    pVertexAttributeDescriptions' <- generateM (fromIntegral vertexAttributeDescriptionCount) (\i -> peekCStruct @VertexInputAttributeDescription ((pVertexAttributeDescriptions `advancePtrBytes` (16 * (i)) :: Ptr VertexInputAttributeDescription)))-    pure $ PipelineVertexInputStateCreateInfo-             next flags pVertexBindingDescriptions' pVertexAttributeDescriptions'--instance es ~ '[] => Zero (PipelineVertexInputStateCreateInfo es) where-  zero = PipelineVertexInputStateCreateInfo-           ()-           zero-           mempty-           mempty----- | VkPipelineInputAssemblyStateCreateInfo - Structure specifying parameters--- of a newly created pipeline input assembly state------ = Description------ Restarting the assembly of primitives discards the most recent index--- values if those elements formed an incomplete primitive, and restarts--- the primitive assembly using the subsequent indices, but only assembling--- the immediately following element through the end of the originally--- specified elements. The primitive restart index value comparison is--- performed before adding the @vertexOffset@ value to the index value.------ == Valid Usage------ -   If @topology@ is---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_POINT_LIST',---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST',---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST',---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'---     or---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',---     @primitiveRestartEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>---     feature is not enabled, @topology@ /must/ not be any of---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY',---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'---     or---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>---     feature is not enabled, @topology@ /must/ not be---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'------ -   If the @VK_KHR_portability_subset@ extension is enabled, and---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@triangleFans@---     is 'Vulkan.Core10.FundamentalTypes.FALSE', @topology@ /must/ not be---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_FAN'.------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO'------ -   @pNext@ /must/ be @NULL@------ -   @flags@ /must/ be @0@------ -   @topology@ /must/ be a valid---     'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' value------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',--- 'Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags.PipelineInputAssemblyStateCreateFlags',--- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data PipelineInputAssemblyStateCreateInfo = PipelineInputAssemblyStateCreateInfo-  { -- | @flags@ is reserved for future use.-    flags :: PipelineInputAssemblyStateCreateFlags-  , -- | @topology@ is a-    -- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' defining the-    -- primitive topology, as described below.-    topology :: PrimitiveTopology-  , -- | @primitiveRestartEnable@ controls whether a special vertex index value-    -- is treated as restarting the assembly of primitives. This enable only-    -- applies to indexed draws-    -- ('Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed' and-    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'), and the-    -- special index value is either 0xFFFFFFFF when the @indexType@ parameter-    -- of 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer' is equal to-    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', 0xFF when @indexType@-    -- is equal to 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', or-    -- 0xFFFF when @indexType@ is equal to-    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16'. Primitive restart is-    -- not allowed for “list” topologies.-    primitiveRestartEnable :: Bool-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineInputAssemblyStateCreateInfo)-#endif-deriving instance Show PipelineInputAssemblyStateCreateInfo--instance ToCStruct PipelineInputAssemblyStateCreateInfo where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineInputAssemblyStateCreateInfo{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags)) (flags)-    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (topology)-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (primitiveRestartEnable))-    f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (zero)-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))-    f--instance FromCStruct PipelineInputAssemblyStateCreateInfo where-  peekCStruct p = do-    flags <- peek @PipelineInputAssemblyStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags))-    topology <- peek @PrimitiveTopology ((p `plusPtr` 20 :: Ptr PrimitiveTopology))-    primitiveRestartEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))-    pure $ PipelineInputAssemblyStateCreateInfo-             flags topology (bool32ToBool primitiveRestartEnable)--instance Storable PipelineInputAssemblyStateCreateInfo where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero PipelineInputAssemblyStateCreateInfo where-  zero = PipelineInputAssemblyStateCreateInfo-           zero-           zero-           zero----- | VkPipelineTessellationStateCreateInfo - Structure specifying parameters--- of a newly created pipeline tessellation state------ == Valid Usage------ -   @patchControlPoints@ /must/ be greater than zero and less than or---     equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be @0@------ = See Also------ 'GraphicsPipelineCreateInfo',--- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',--- 'Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags.PipelineTessellationStateCreateFlags',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data PipelineTessellationStateCreateInfo (es :: [Type]) = PipelineTessellationStateCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is reserved for future use.-    flags :: PipelineTessellationStateCreateFlags-  , -- | @patchControlPoints@ number of control points per patch.-    patchControlPoints :: Word32-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineTessellationStateCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (PipelineTessellationStateCreateInfo es)--instance Extensible PipelineTessellationStateCreateInfo where-  extensibleType = STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO-  setNext x next = x{next = next}-  getNext PipelineTessellationStateCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineTessellationStateCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @PipelineTessellationDomainOriginStateCreateInfo = Just f-    | otherwise = Nothing--instance (Extendss PipelineTessellationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineTessellationStateCreateInfo es) where-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineTessellationStateCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (patchControlPoints)-    lift $ f-  cStructSize = 24-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)-    lift $ f--instance (Extendss PipelineTessellationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineTessellationStateCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineTessellationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags))-    patchControlPoints <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    pure $ PipelineTessellationStateCreateInfo-             next flags patchControlPoints--instance es ~ '[] => Zero (PipelineTessellationStateCreateInfo es) where-  zero = PipelineTessellationStateCreateInfo-           ()-           zero-           zero----- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a--- newly created pipeline viewport state------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>---     feature is not enabled, @viewportCount@ /must/ not be greater than---     @1@------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>---     feature is not enabled, @scissorCount@ /must/ not be greater than---     @1@------ -   @viewportCount@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@------ -   @scissorCount@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@------ -   The @x@ and @y@ members of @offset@ member of any element of---     @pScissors@ /must/ be greater than or equal to @0@------ -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a---     signed integer addition overflow for any element of @pScissors@------ -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a---     signed integer addition overflow for any element of @pScissors@------ -   If the graphics pipeline is being created without---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     set then @scissorCount@ and @viewportCount@ /must/ be identical------ -   If the graphics pipeline is being created with---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     set then @viewportCount@ /must/ be @0@, otherwise it /must/ be---     greater than @0@------ -   If the graphics pipeline is being created with---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     set then @scissorCount@ /must/ be @0@, otherwise it /must/ be---     greater than @0@------ -   If the @viewportWScalingEnable@ member of a---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'---     structure included in the @pNext@ chain is---     'Vulkan.Core10.FundamentalTypes.TRUE', the @viewportCount@ member of---     the---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'---     structure /must/ be greater than or equal to---     'PipelineViewportStateCreateInfo'::@viewportCount@------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_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---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV',---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',---     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',---     or---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be @0@------ = See Also------ 'GraphicsPipelineCreateInfo',--- 'Vulkan.Core10.Enums.PipelineViewportStateCreateFlags.PipelineViewportStateCreateFlags',--- 'Vulkan.Core10.FundamentalTypes.Rect2D',--- 'Vulkan.Core10.Enums.StructureType.StructureType', 'Viewport'-data PipelineViewportStateCreateInfo (es :: [Type]) = PipelineViewportStateCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is reserved for future use.-    flags :: PipelineViewportStateCreateFlags-  , -- | @viewportCount@ is the number of viewports used by the pipeline.-    viewportCount :: Word32-  , -- | @pViewports@ is a pointer to an array of 'Viewport' structures, defining-    -- the viewport transforms. If the viewport state is dynamic, this member-    -- is ignored.-    viewports :: Vector Viewport-  , -- | @scissorCount@ is the number of-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-scissor scissors>-    -- and /must/ match the number of viewports.-    scissorCount :: Word32-  , -- | @pScissors@ is a pointer to an array of-    -- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures defining the-    -- rectangular bounds of the scissor for the corresponding viewport. If the-    -- scissor state is dynamic, this member is ignored.-    scissors :: Vector Rect2D-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineViewportStateCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (PipelineViewportStateCreateInfo es)--instance Extensible PipelineViewportStateCreateInfo where-  extensibleType = STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO-  setNext x next = x{next = next}-  getNext PipelineViewportStateCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineViewportStateCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @PipelineViewportCoarseSampleOrderStateCreateInfoNV = Just f-    | Just Refl <- eqT @e @PipelineViewportShadingRateImageStateCreateInfoNV = Just f-    | Just Refl <- eqT @e @PipelineViewportExclusiveScissorStateCreateInfoNV = Just f-    | Just Refl <- eqT @e @PipelineViewportSwizzleStateCreateInfoNV = Just f-    | Just Refl <- eqT @e @PipelineViewportWScalingStateCreateInfoNV = Just f-    | otherwise = Nothing--instance (Extendss PipelineViewportStateCreateInfo es, PokeChain es) => ToCStruct (PipelineViewportStateCreateInfo es) where-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineViewportStateCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags)) (flags)-    let pViewportsLength = Data.Vector.length $ (viewports)-    viewportCount'' <- lift $ if (viewportCount) == 0-      then pure $ fromIntegral pViewportsLength-      else do-        unless (fromIntegral pViewportsLength == (viewportCount) || pViewportsLength == 0) $-          throwIO $ IOError Nothing InvalidArgument "" "pViewports must be empty or have 'viewportCount' elements" Nothing Nothing-        pure (viewportCount)-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (viewportCount'')-    pViewports'' <- if Data.Vector.null (viewports)-      then pure nullPtr-      else do-        pPViewports <- ContT $ allocaBytesAligned @Viewport (((Data.Vector.length (viewports))) * 24) 4-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e) . ($ ())) ((viewports))-        pure $ pPViewports-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Viewport))) pViewports''-    let pScissorsLength = Data.Vector.length $ (scissors)-    scissorCount'' <- lift $ if (scissorCount) == 0-      then pure $ fromIntegral pScissorsLength-      else do-        unless (fromIntegral pScissorsLength == (scissorCount) || pScissorsLength == 0) $-          throwIO $ IOError Nothing InvalidArgument "" "pScissors must be empty or have 'scissorCount' elements" Nothing Nothing-        pure (scissorCount)-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (scissorCount'')-    pScissors'' <- if Data.Vector.null (scissors)-      then pure nullPtr-      else do-        pPScissors <- ContT $ allocaBytesAligned @Rect2D (((Data.Vector.length (scissors))) * 16) 4-        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) ((scissors))-        pure $ pPScissors-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) pScissors''-    lift $ f-  cStructSize = 48-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ f--instance (Extendss PipelineViewportStateCreateInfo es, PeekChain es) => FromCStruct (PipelineViewportStateCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineViewportStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags))-    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    pViewports <- peek @(Ptr Viewport) ((p `plusPtr` 24 :: Ptr (Ptr Viewport)))-    let pViewportsLength = if pViewports == nullPtr then 0 else (fromIntegral viewportCount)-    pViewports' <- generateM pViewportsLength (\i -> peekCStruct @Viewport ((pViewports `advancePtrBytes` (24 * (i)) :: Ptr Viewport)))-    scissorCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))-    pScissors <- peek @(Ptr Rect2D) ((p `plusPtr` 40 :: Ptr (Ptr Rect2D)))-    let pScissorsLength = if pScissors == nullPtr then 0 else (fromIntegral scissorCount)-    pScissors' <- generateM pScissorsLength (\i -> peekCStruct @Rect2D ((pScissors `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))-    pure $ PipelineViewportStateCreateInfo-             next flags viewportCount pViewports' scissorCount pScissors'--instance es ~ '[] => Zero (PipelineViewportStateCreateInfo es) where-  zero = PipelineViewportStateCreateInfo-           ()-           zero-           zero-           mempty-           zero-           mempty----- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters--- of a newly created pipeline rasterization state------ = Description------ The application /can/ also add a--- 'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD'--- structure to the @pNext@ chain of a--- 'PipelineRasterizationStateCreateInfo' structure. This structure enables--- selecting the rasterization order to use when rendering with the--- corresponding graphics pipeline as described in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-order Rasterization Order>.------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthClamp depth clamping>---     feature is not enabled, @depthClampEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fillModeNonSolid non-solid fill modes>---     feature is not enabled, @polygonMode@ /must/ be---     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL' or---     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'------ -   If the @VK_NV_fill_rectangle@ extension is not enabled,---     @polygonMode@ /must/ not be---     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'------ -   If the @VK_KHR_portability_subset@ extension is enabled, and---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@pointPolygons@---     is 'Vulkan.Core10.FundamentalTypes.FALSE', and---     @rasterizerDiscardEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE',---     @polygonMode@ /must/ not be---     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT'.------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_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---     'Vulkan.Extensions.VK_EXT_conservative_rasterization.PipelineRasterizationConservativeStateCreateInfoEXT',---     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',---     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',---     'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD',---     or---     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be @0@------ -   @polygonMode@ /must/ be a valid---     'Vulkan.Core10.Enums.PolygonMode.PolygonMode' value------ -   @cullMode@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits' values------ -   @frontFace@ /must/ be a valid---     'Vulkan.Core10.Enums.FrontFace.FrontFace' value------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32',--- 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlags',--- 'Vulkan.Core10.Enums.FrontFace.FrontFace', 'GraphicsPipelineCreateInfo',--- 'Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags.PipelineRasterizationStateCreateFlags',--- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data PipelineRasterizationStateCreateInfo (es :: [Type]) = PipelineRasterizationStateCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is reserved for future use.-    flags :: PipelineRasterizationStateCreateFlags-  , -- | @depthClampEnable@ controls whether to clamp the fragment’s depth values-    -- as described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth Depth Test>.-    -- If the pipeline is not created with-    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'-    -- present then enabling depth clamp will also disable clipping primitives-    -- to the z planes of the frustrum as described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>.-    -- Otherwise depth clipping is controlled by the state set in-    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'.-    depthClampEnable :: Bool-  , -- | @rasterizerDiscardEnable@ controls whether primitives are discarded-    -- immediately before the rasterization stage.-    rasterizerDiscardEnable :: Bool-  , -- | @polygonMode@ is the triangle rendering mode. See-    -- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode'.-    polygonMode :: PolygonMode-  , -- | @cullMode@ is the triangle facing direction used for primitive culling.-    -- See 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits'.-    cullMode :: CullModeFlags-  , -- | @frontFace@ is a 'Vulkan.Core10.Enums.FrontFace.FrontFace' value-    -- specifying the front-facing triangle orientation to be used for culling.-    frontFace :: FrontFace-  , -- | @depthBiasEnable@ controls whether to bias fragment depth values.-    depthBiasEnable :: Bool-  , -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant-    -- depth value added to each fragment.-    depthBiasConstantFactor :: Float-  , -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.-    depthBiasClamp :: Float-  , -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope-    -- in depth bias calculations.-    depthBiasSlopeFactor :: Float-  , -- | @lineWidth@ is the width of rasterized line segments.-    lineWidth :: Float-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineRasterizationStateCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (PipelineRasterizationStateCreateInfo es)--instance Extensible PipelineRasterizationStateCreateInfo where-  extensibleType = STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO-  setNext x next = x{next = next}-  getNext PipelineRasterizationStateCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineRasterizationStateCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @PipelineRasterizationLineStateCreateInfoEXT = Just f-    | Just Refl <- eqT @e @PipelineRasterizationDepthClipStateCreateInfoEXT = Just f-    | Just Refl <- eqT @e @PipelineRasterizationStateStreamCreateInfoEXT = Just f-    | Just Refl <- eqT @e @PipelineRasterizationConservativeStateCreateInfoEXT = Just f-    | Just Refl <- eqT @e @PipelineRasterizationStateRasterizationOrderAMD = Just f-    | otherwise = Nothing--instance (Extendss PipelineRasterizationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineRasterizationStateCreateInfo es) where-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineRasterizationStateCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthClampEnable))-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rasterizerDiscardEnable))-    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (polygonMode)-    lift $ poke ((p `plusPtr` 32 :: Ptr CullModeFlags)) (cullMode)-    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (frontFace)-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (depthBiasEnable))-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (depthBiasConstantFactor))-    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (depthBiasClamp))-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (depthBiasSlopeFactor))-    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (lineWidth))-    lift $ f-  cStructSize = 64-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (zero)-    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (zero)-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))-    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))-    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))-    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))-    lift $ f--instance (Extendss PipelineRasterizationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineRasterizationStateCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineRasterizationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags))-    depthClampEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))-    rasterizerDiscardEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))-    polygonMode <- peek @PolygonMode ((p `plusPtr` 28 :: Ptr PolygonMode))-    cullMode <- peek @CullModeFlags ((p `plusPtr` 32 :: Ptr CullModeFlags))-    frontFace <- peek @FrontFace ((p `plusPtr` 36 :: Ptr FrontFace))-    depthBiasEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))-    depthBiasConstantFactor <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))-    depthBiasClamp <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))-    depthBiasSlopeFactor <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))-    lineWidth <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))-    pure $ PipelineRasterizationStateCreateInfo-             next flags (bool32ToBool depthClampEnable) (bool32ToBool rasterizerDiscardEnable) polygonMode cullMode frontFace (bool32ToBool depthBiasEnable) ((\(CFloat a) -> a) depthBiasConstantFactor) ((\(CFloat a) -> a) depthBiasClamp) ((\(CFloat a) -> a) depthBiasSlopeFactor) ((\(CFloat a) -> a) lineWidth)--instance es ~ '[] => Zero (PipelineRasterizationStateCreateInfo es) where-  zero = PipelineRasterizationStateCreateInfo-           ()-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero----- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters--- of a newly created pipeline multisample state------ = Description------ Each bit in the sample mask is associated with a unique--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>--- as defined for the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask coverage mask>.--- Each bit b for mask word w in the sample mask corresponds to sample--- index i, where i = 32 × w + b. @pSampleMask@ has a length equal to ⌈--- @rasterizationSamples@ \/ 32 ⌉ words.------ If @pSampleMask@ is @NULL@, it is treated as if the mask has all bits--- set to @1@.------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sampleRateShading sample rate shading>---     feature is not enabled, @sampleShadingEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-alphaToOne alpha to one>---     feature is not enabled, @alphaToOneEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'------ -   @minSampleShading@ /must/ be in the range [0,1]------ -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and---     if the subpass has any color attachments and @rasterizationSamples@---     is greater than the number of color samples, then---     @sampleShadingEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_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---     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',---     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV',---     'Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',---     or---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be @0@------ -   @rasterizationSamples@ /must/ be a valid---     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value------ -   If @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid---     pointer to an array of---     \(\lceil{\mathit{rasterizationSamples} \over 32}\rceil\)---     'Vulkan.Core10.FundamentalTypes.SampleMask' values------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',--- 'Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags.PipelineMultisampleStateCreateFlags',--- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',--- 'Vulkan.Core10.FundamentalTypes.SampleMask',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data PipelineMultisampleStateCreateInfo (es :: [Type]) = PipelineMultisampleStateCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is reserved for future use.-    flags :: PipelineMultisampleStateCreateFlags-  , -- | @rasterizationSamples@ is a-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' specifying-    -- the number of samples used in rasterization.-    rasterizationSamples :: SampleCountFlagBits-  , -- | @sampleShadingEnable@ /can/ be used to enable-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>.-    sampleShadingEnable :: Bool-  , -- | @minSampleShading@ specifies a minimum fraction of sample shading if-    -- @sampleShadingEnable@ is set to 'Vulkan.Core10.FundamentalTypes.TRUE'.-    minSampleShading :: Float-  , -- | @pSampleMask@ is an array of 'Vulkan.Core10.FundamentalTypes.SampleMask'-    -- values used in the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-samplemask sample mask test>.-    sampleMask :: Vector SampleMask-  , -- | @alphaToCoverageEnable@ controls whether a temporary coverage value is-    -- generated based on the alpha component of the fragment’s first color-    -- output as specified in the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-covg Multisample Coverage>-    -- section.-    alphaToCoverageEnable :: Bool-  , -- | @alphaToOneEnable@ controls whether the alpha component of the-    -- fragment’s first color output is replaced with one as described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-covg Multisample Coverage>.-    alphaToOneEnable :: Bool-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineMultisampleStateCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (PipelineMultisampleStateCreateInfo es)--instance Extensible PipelineMultisampleStateCreateInfo where-  extensibleType = STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO-  setNext x next = x{next = next}-  getNext PipelineMultisampleStateCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineMultisampleStateCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @PipelineCoverageReductionStateCreateInfoNV = Just f-    | Just Refl <- eqT @e @PipelineCoverageModulationStateCreateInfoNV = Just f-    | Just Refl <- eqT @e @PipelineSampleLocationsStateCreateInfoEXT = Just f-    | Just Refl <- eqT @e @PipelineCoverageToColorStateCreateInfoNV = Just f-    | otherwise = Nothing--instance (Extendss PipelineMultisampleStateCreateInfo es, PokeChain es) => ToCStruct (PipelineMultisampleStateCreateInfo es) where-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineMultisampleStateCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (rasterizationSamples)-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleShadingEnable))-    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (minSampleShading))-    pSampleMask'' <- case Data.Vector.length (sampleMask) of-      0      -> pure nullPtr-      vecLen -> do-        let requiredLen = case (rasterizationSamples) of-              SampleCountFlagBits n -> (n + 31) `quot` 32-        lift $ unless (requiredLen == fromIntegral vecLen) $-          throwIO $ IOError Nothing InvalidArgument "" "sampleMask must be either empty or contain enough bits to cover all the sample specified by 'rasterizationSamples'" Nothing Nothing-        do-          pPSampleMask' <- ContT $ allocaBytesAligned @SampleMask ((Data.Vector.length ((sampleMask))) * 4) 4-          lift $ Data.Vector.imapM_ (\i e -> poke (pPSampleMask' `plusPtr` (4 * (i)) :: Ptr SampleMask) (e)) ((sampleMask))-          pure $ pPSampleMask'-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleMask))) pSampleMask''-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (alphaToCoverageEnable))-    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (alphaToOneEnable))-    lift $ f-  cStructSize = 48-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (zero))-    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ f--instance (Extendss PipelineMultisampleStateCreateInfo es, PeekChain es) => FromCStruct (PipelineMultisampleStateCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineMultisampleStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags))-    rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 20 :: Ptr SampleCountFlagBits))-    sampleShadingEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))-    minSampleShading <- peek @CFloat ((p `plusPtr` 28 :: Ptr CFloat))-    pSampleMask <- peek @(Ptr SampleMask) ((p `plusPtr` 32 :: Ptr (Ptr SampleMask)))-    pSampleMask' <- if pSampleMask == nullPtr-      then pure mempty-      else generateM (case rasterizationSamples of-        SampleCountFlagBits n -> (fromIntegral n + 31) `quot` 32) (\i -> peek @SampleMask (((pSampleMask) `advancePtrBytes` (4 * (i)) :: Ptr SampleMask)))-    alphaToCoverageEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))-    alphaToOneEnable <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))-    pure $ PipelineMultisampleStateCreateInfo-             next flags rasterizationSamples (bool32ToBool sampleShadingEnable) ((\(CFloat a) -> a) minSampleShading) pSampleMask' (bool32ToBool alphaToCoverageEnable) (bool32ToBool alphaToOneEnable)--instance es ~ '[] => Zero (PipelineMultisampleStateCreateInfo es) where-  zero = PipelineMultisampleStateCreateInfo-           ()-           zero-           zero-           zero-           zero-           mempty-           zero-           zero----- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline--- color blend attachment state------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>---     feature is not enabled, @srcColorBlendFactor@ /must/ not be---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>---     feature is not enabled, @dstColorBlendFactor@ /must/ not be---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>---     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>---     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'------ -   If either of @colorBlendOp@ or @alphaBlendOp@ is an---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,---     then @colorBlendOp@ /must/ equal @alphaBlendOp@------ -   If---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@---     is 'Vulkan.Core10.FundamentalTypes.FALSE' and @colorBlendOp@ is an---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,---     then @colorBlendOp@ /must/ be the same for all attachments------ -   If---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@---     is 'Vulkan.Core10.FundamentalTypes.FALSE' and @alphaBlendOp@ is an---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,---     then @alphaBlendOp@ /must/ be the same for all attachments------ -   If---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendAllOperations@---     is 'Vulkan.Core10.FundamentalTypes.FALSE', then @colorBlendOp@---     /must/ not be 'Vulkan.Core10.Enums.BlendOp.BLEND_OP_ZERO_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OVER_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OVER_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_IN_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_IN_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OUT_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OUT_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_ATOP_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_ATOP_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_XOR_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_RGB_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARDODGE_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARBURN_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_VIVIDLIGHT_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARLIGHT_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PINLIGHT_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_HARDMIX_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_ALPHA_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_DARKER_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_CLAMPED_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_CONTRAST_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_OVG_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_RED_EXT',---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_GREEN_EXT', or---     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_BLUE_EXT'------ -   If @colorBlendOp@ or @alphaBlendOp@ is an---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,---     then @colorAttachmentCount@ of the subpass this pipeline is compiled---     against /must/ be less than or equal to---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::advancedBlendMaxColorAttachments------ -   If the @VK_KHR_portability_subset@ extension is enabled, and---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@---     is 'Vulkan.Core10.FundamentalTypes.FALSE', @srcColorBlendFactor@---     /must/ not be---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'.------ -   If the @VK_KHR_portability_subset@ extension is enabled, and---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@---     is 'Vulkan.Core10.FundamentalTypes.FALSE', @dstColorBlendFactor@---     /must/ not be---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or---     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'.------ == Valid Usage (Implicit)------ -   @srcColorBlendFactor@ /must/ be a valid---     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value------ -   @dstColorBlendFactor@ /must/ be a valid---     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value------ -   @colorBlendOp@ /must/ be a valid---     'Vulkan.Core10.Enums.BlendOp.BlendOp' value------ -   @srcAlphaBlendFactor@ /must/ be a valid---     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value------ -   @dstAlphaBlendFactor@ /must/ be a valid---     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value------ -   @alphaBlendOp@ /must/ be a valid---     'Vulkan.Core10.Enums.BlendOp.BlendOp' value------ -   @colorWriteMask@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'---     values------ = See Also------ 'Vulkan.Core10.Enums.BlendFactor.BlendFactor',--- 'Vulkan.Core10.Enums.BlendOp.BlendOp',--- 'Vulkan.Core10.FundamentalTypes.Bool32',--- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags',--- 'PipelineColorBlendStateCreateInfo'-data PipelineColorBlendAttachmentState = PipelineColorBlendAttachmentState-  { -- | @blendEnable@ controls whether blending is enabled for the corresponding-    -- color attachment. If blending is not enabled, the source fragment’s-    -- color for that attachment is passed through unmodified.-    blendEnable :: Bool-  , -- | @srcColorBlendFactor@ selects which blend factor is used to determine-    -- the source factors (Sr,Sg,Sb).-    srcColorBlendFactor :: BlendFactor-  , -- | @dstColorBlendFactor@ selects which blend factor is used to determine-    -- the destination factors (Dr,Dg,Db).-    dstColorBlendFactor :: BlendFactor-  , -- | @colorBlendOp@ selects which blend operation is used to calculate the-    -- RGB values to write to the color attachment.-    colorBlendOp :: BlendOp-  , -- | @srcAlphaBlendFactor@ selects which blend factor is used to determine-    -- the source factor Sa.-    srcAlphaBlendFactor :: BlendFactor-  , -- | @dstAlphaBlendFactor@ selects which blend factor is used to determine-    -- the destination factor Da.-    dstAlphaBlendFactor :: BlendFactor-  , -- | @alphaBlendOp@ selects which blend operation is use to calculate the-    -- alpha values to write to the color attachment.-    alphaBlendOp :: BlendOp-  , -- | @colorWriteMask@ is a bitmask of-    -- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'-    -- specifying which of the R, G, B, and\/or A components are enabled for-    -- writing, as described for the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-color-write-mask Color Write Mask>.-    colorWriteMask :: ColorComponentFlags-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineColorBlendAttachmentState)-#endif-deriving instance Show PipelineColorBlendAttachmentState--instance ToCStruct PipelineColorBlendAttachmentState where-  withCStruct x f = allocaBytesAligned 32 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineColorBlendAttachmentState{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (blendEnable))-    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (srcColorBlendFactor)-    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (dstColorBlendFactor)-    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (colorBlendOp)-    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (srcAlphaBlendFactor)-    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (dstAlphaBlendFactor)-    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (alphaBlendOp)-    poke ((p `plusPtr` 28 :: Ptr ColorComponentFlags)) (colorWriteMask)-    f-  cStructSize = 32-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (zero)-    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (zero)-    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (zero)-    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (zero)-    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (zero)-    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (zero)-    f--instance FromCStruct PipelineColorBlendAttachmentState where-  peekCStruct p = do-    blendEnable <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))-    srcColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 4 :: Ptr BlendFactor))-    dstColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 8 :: Ptr BlendFactor))-    colorBlendOp <- peek @BlendOp ((p `plusPtr` 12 :: Ptr BlendOp))-    srcAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 16 :: Ptr BlendFactor))-    dstAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 20 :: Ptr BlendFactor))-    alphaBlendOp <- peek @BlendOp ((p `plusPtr` 24 :: Ptr BlendOp))-    colorWriteMask <- peek @ColorComponentFlags ((p `plusPtr` 28 :: Ptr ColorComponentFlags))-    pure $ PipelineColorBlendAttachmentState-             (bool32ToBool blendEnable) srcColorBlendFactor dstColorBlendFactor colorBlendOp srcAlphaBlendFactor dstAlphaBlendFactor alphaBlendOp colorWriteMask--instance Storable PipelineColorBlendAttachmentState where-  sizeOf ~_ = 32-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero PipelineColorBlendAttachmentState where-  zero = PipelineColorBlendAttachmentState-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero----- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of--- a newly created pipeline color blend state------ = Description------ Each element of the @pAttachments@ array is a--- 'PipelineColorBlendAttachmentState' structure specifying per-target--- blending state for each individual color attachment. If the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-independentBlend independent blending>--- feature is not enabled on the device, all--- 'PipelineColorBlendAttachmentState' elements in the @pAttachments@ array--- /must/ be identical.------ The value of @attachmentCount@ /must/ be greater than the index of all--- color attachments that are not--- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' in--- 'Vulkan.Core10.Pass.SubpassDescription'::@pColorAttachments@ or--- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2'::@pColorAttachments@--- for the subpass in which this pipeline is used.------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-independentBlend independent blending>---     feature is not enabled, all elements of @pAttachments@ /must/ be---     identical------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-logicOp logic operations>---     feature is not enabled, @logicOpEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'------ -   If @logicOpEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',---     @logicOp@ /must/ be a valid 'Vulkan.Core10.Enums.LogicOp.LogicOp'---     value------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be @0@------ -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid---     pointer to an array of @attachmentCount@ valid---     'PipelineColorBlendAttachmentState' structures------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',--- 'Vulkan.Core10.Enums.LogicOp.LogicOp',--- 'PipelineColorBlendAttachmentState',--- 'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags.PipelineColorBlendStateCreateFlags',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data PipelineColorBlendStateCreateInfo (es :: [Type]) = PipelineColorBlendStateCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is reserved for future use.-    flags :: PipelineColorBlendStateCreateFlags-  , -- | @logicOpEnable@ controls whether to apply-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-logicop Logical Operations>.-    logicOpEnable :: Bool-  , -- | @logicOp@ selects which logical operation to apply.-    logicOp :: LogicOp-  , -- | @pAttachments@: is a pointer to an array of per target attachment-    -- states.-    attachments :: Vector PipelineColorBlendAttachmentState-  , -- | @blendConstants@ is a pointer to an array of four values used as the R,-    -- G, B, and A components of the blend constant that are used in blending,-    -- depending on the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.-    blendConstants :: (Float, Float, Float, Float)-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineColorBlendStateCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (PipelineColorBlendStateCreateInfo es)--instance Extensible PipelineColorBlendStateCreateInfo where-  extensibleType = STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO-  setNext x next = x{next = next}-  getNext PipelineColorBlendStateCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineColorBlendStateCreateInfo e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @PipelineColorBlendAdvancedStateCreateInfoEXT = Just f-    | otherwise = Nothing--instance (Extendss PipelineColorBlendStateCreateInfo es, PokeChain es) => ToCStruct (PipelineColorBlendStateCreateInfo es) where-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineColorBlendStateCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (logicOpEnable))-    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (logicOp)-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))-    pPAttachments' <- ContT $ allocaBytesAligned @PipelineColorBlendAttachmentState ((Data.Vector.length (attachments)) * 32) 4-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e) . ($ ())) (attachments)-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')-    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))-    lift $ case (blendConstants) of-      (e0, e1, e2, e3) -> do-        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))-        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))-        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))-        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-    lift $ f-  cStructSize = 56-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (zero)-    pPAttachments' <- ContT $ allocaBytesAligned @PipelineColorBlendAttachmentState ((Data.Vector.length (mempty)) * 32) 4-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')-    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))-    lift $ case ((zero, zero, zero, zero)) of-      (e0, e1, e2, e3) -> do-        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))-        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))-        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))-        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-    lift $ f--instance (Extendss PipelineColorBlendStateCreateInfo es, PeekChain es) => FromCStruct (PipelineColorBlendStateCreateInfo es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineColorBlendStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags))-    logicOpEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))-    logicOp <- peek @LogicOp ((p `plusPtr` 24 :: Ptr LogicOp))-    attachmentCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))-    pAttachments <- peek @(Ptr PipelineColorBlendAttachmentState) ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState)))-    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekCStruct @PipelineColorBlendAttachmentState ((pAttachments `advancePtrBytes` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState)))-    let pblendConstants = lowerArrayPtr @CFloat ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))-    blendConstants0 <- peek @CFloat ((pblendConstants `advancePtrBytes` 0 :: Ptr CFloat))-    blendConstants1 <- peek @CFloat ((pblendConstants `advancePtrBytes` 4 :: Ptr CFloat))-    blendConstants2 <- peek @CFloat ((pblendConstants `advancePtrBytes` 8 :: Ptr CFloat))-    blendConstants3 <- peek @CFloat ((pblendConstants `advancePtrBytes` 12 :: Ptr CFloat))-    pure $ PipelineColorBlendStateCreateInfo-             next flags (bool32ToBool logicOpEnable) logicOp pAttachments' ((((\(CFloat a) -> a) blendConstants0), ((\(CFloat a) -> a) blendConstants1), ((\(CFloat a) -> a) blendConstants2), ((\(CFloat a) -> a) blendConstants3)))--instance es ~ '[] => Zero (PipelineColorBlendStateCreateInfo es) where-  zero = PipelineColorBlendStateCreateInfo-           ()-           zero-           zero-           zero-           mempty-           (zero, zero, zero, zero)----- | VkPipelineDynamicStateCreateInfo - Structure specifying parameters of a--- newly created pipeline dynamic state------ == Valid Usage------ -   Each element of @pDynamicStates@ /must/ be unique------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO'------ -   @pNext@ /must/ be @NULL@------ -   @flags@ /must/ be @0@------ -   If @dynamicStateCount@ is not @0@, @pDynamicStates@ /must/ be a---     valid pointer to an array of @dynamicStateCount@ valid---     'Vulkan.Core10.Enums.DynamicState.DynamicState' values------ = See Also------ 'Vulkan.Core10.Enums.DynamicState.DynamicState',--- 'GraphicsPipelineCreateInfo',--- 'Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags.PipelineDynamicStateCreateFlags',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data PipelineDynamicStateCreateInfo = PipelineDynamicStateCreateInfo-  { -- | @flags@ is reserved for future use.-    flags :: PipelineDynamicStateCreateFlags-  , -- | @pDynamicStates@ is a pointer to an array of-    -- 'Vulkan.Core10.Enums.DynamicState.DynamicState' values specifying which-    -- pieces of pipeline state will use the values from dynamic state commands-    -- rather than from pipeline state creation info.-    dynamicStates :: Vector DynamicState-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineDynamicStateCreateInfo)-#endif-deriving instance Show PipelineDynamicStateCreateInfo--instance ToCStruct PipelineDynamicStateCreateInfo where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineDynamicStateCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dynamicStates)) :: Word32))-    pPDynamicStates' <- ContT $ allocaBytesAligned @DynamicState ((Data.Vector.length (dynamicStates)) * 4) 4-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (dynamicStates)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')-    lift $ f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    pPDynamicStates' <- ContT $ allocaBytesAligned @DynamicState ((Data.Vector.length (mempty)) * 4) 4-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (mempty)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')-    lift $ f--instance FromCStruct PipelineDynamicStateCreateInfo where-  peekCStruct p = do-    flags <- peek @PipelineDynamicStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags))-    dynamicStateCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    pDynamicStates <- peek @(Ptr DynamicState) ((p `plusPtr` 24 :: Ptr (Ptr DynamicState)))-    pDynamicStates' <- generateM (fromIntegral dynamicStateCount) (\i -> peek @DynamicState ((pDynamicStates `advancePtrBytes` (4 * (i)) :: Ptr DynamicState)))-    pure $ PipelineDynamicStateCreateInfo-             flags pDynamicStates'--instance Zero PipelineDynamicStateCreateInfo where-  zero = PipelineDynamicStateCreateInfo-           zero-           mempty----- | VkStencilOpState - Structure specifying stencil operation state------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Core10.Enums.CompareOp.CompareOp',--- 'PipelineDepthStencilStateCreateInfo',--- 'Vulkan.Core10.Enums.StencilOp.StencilOp'-data StencilOpState = StencilOpState-  { -- | @failOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value specifying-    -- the action performed on samples that fail the stencil test.-    ---    -- @failOp@ /must/ be a valid 'Vulkan.Core10.Enums.StencilOp.StencilOp'-    -- value-    failOp :: StencilOp-  , -- | @passOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value specifying-    -- the action performed on samples that pass both the depth and stencil-    -- tests.-    ---    -- @passOp@ /must/ be a valid 'Vulkan.Core10.Enums.StencilOp.StencilOp'-    -- value-    passOp :: StencilOp-  , -- | @depthFailOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value-    -- specifying the action performed on samples that pass the stencil test-    -- and fail the depth test.-    ---    -- @depthFailOp@ /must/ be a valid-    -- 'Vulkan.Core10.Enums.StencilOp.StencilOp' value-    depthFailOp :: StencilOp-  , -- | @compareOp@ is a 'Vulkan.Core10.Enums.CompareOp.CompareOp' value-    -- specifying the comparison operator used in the stencil test.-    ---    -- @compareOp@ /must/ be a valid 'Vulkan.Core10.Enums.CompareOp.CompareOp'-    -- value-    compareOp :: CompareOp-  , -- | @compareMask@ selects the bits of the unsigned integer stencil values-    -- participating in the stencil test.-    compareMask :: Word32-  , -- | @writeMask@ selects the bits of the unsigned integer stencil values-    -- updated by the stencil test in the stencil framebuffer attachment.-    writeMask :: Word32-  , -- | @reference@ is an integer reference value that is used in the unsigned-    -- stencil comparison.-    reference :: Word32-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (StencilOpState)-#endif-deriving instance Show StencilOpState--instance ToCStruct StencilOpState where-  withCStruct x f = allocaBytesAligned 28 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p StencilOpState{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (failOp)-    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (passOp)-    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (depthFailOp)-    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (compareOp)-    poke ((p `plusPtr` 16 :: Ptr Word32)) (compareMask)-    poke ((p `plusPtr` 20 :: Ptr Word32)) (writeMask)-    poke ((p `plusPtr` 24 :: Ptr Word32)) (reference)-    f-  cStructSize = 28-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (zero)-    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (zero)-    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (zero)-    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (zero)-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)-    f--instance FromCStruct StencilOpState where-  peekCStruct p = do-    failOp <- peek @StencilOp ((p `plusPtr` 0 :: Ptr StencilOp))-    passOp <- peek @StencilOp ((p `plusPtr` 4 :: Ptr StencilOp))-    depthFailOp <- peek @StencilOp ((p `plusPtr` 8 :: Ptr StencilOp))-    compareOp <- peek @CompareOp ((p `plusPtr` 12 :: Ptr CompareOp))-    compareMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))-    writeMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    reference <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))-    pure $ StencilOpState-             failOp passOp depthFailOp compareOp compareMask writeMask reference--instance Storable StencilOpState where-  sizeOf ~_ = 28-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero StencilOpState where-  zero = StencilOpState-           zero-           zero-           zero-           zero-           zero-           zero-           zero----- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters--- of a newly created pipeline depth stencil state------ == Valid Usage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBounds depth bounds testing>---     feature is not enabled, @depthBoundsTestEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'------ -   If the @VK_KHR_portability_subset@ extension is enabled, and---     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@separateStencilMaskRef@---     is 'Vulkan.Core10.FundamentalTypes.FALSE', and the value of---     'PipelineDepthStencilStateCreateInfo'::@stencilTestEnable@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', and the value of---     'PipelineRasterizationStateCreateInfo'::@cullMode@ is---     'Vulkan.Core10.Enums.CullModeFlagBits.CULL_MODE_NONE', the value of---     @reference@ in each of the 'StencilOpState' structs in @front@ and---     @back@ /must/ be the same.------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO'------ -   @pNext@ /must/ be @NULL@------ -   @flags@ /must/ be @0@------ -   @depthCompareOp@ /must/ be a valid---     'Vulkan.Core10.Enums.CompareOp.CompareOp' value------ -   @front@ /must/ be a valid 'StencilOpState' structure------ -   @back@ /must/ be a valid 'StencilOpState' structure------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32',--- 'Vulkan.Core10.Enums.CompareOp.CompareOp', 'GraphicsPipelineCreateInfo',--- 'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags.PipelineDepthStencilStateCreateFlags',--- 'StencilOpState', 'Vulkan.Core10.Enums.StructureType.StructureType'-data PipelineDepthStencilStateCreateInfo = PipelineDepthStencilStateCreateInfo-  { -- | @flags@ is reserved for future use.-    flags :: PipelineDepthStencilStateCreateFlags-  , -- | @depthTestEnable@ controls whether-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth testing>-    -- is enabled.-    depthTestEnable :: Bool-  , -- | @depthWriteEnable@ controls whether-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth-write depth writes>-    -- are enabled when @depthTestEnable@ is-    -- 'Vulkan.Core10.FundamentalTypes.TRUE'. Depth writes are always disabled-    -- when @depthTestEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE'.-    depthWriteEnable :: Bool-  , -- | @depthCompareOp@ is the comparison operator used in the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth test>.-    depthCompareOp :: CompareOp-  , -- | @depthBoundsTestEnable@ controls whether-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds testing>-    -- is enabled.-    depthBoundsTestEnable :: Bool-  , -- | @stencilTestEnable@ controls whether-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil stencil testing>-    -- is enabled.-    stencilTestEnable :: Bool-  , -- | @front@ and @back@ control the parameters of the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil stencil test>.-    front :: StencilOpState-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "back"-    back :: StencilOpState-  , -- | @minDepthBounds@ is the minimum depth bound used in the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds test>.-    minDepthBounds :: Float-  , -- | @maxDepthBounds@ is the maximum depth bound used in the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds test>.-    maxDepthBounds :: Float-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PipelineDepthStencilStateCreateInfo)-#endif-deriving instance Show PipelineDepthStencilStateCreateInfo--instance ToCStruct PipelineDepthStencilStateCreateInfo where-  withCStruct x f = allocaBytesAligned 104 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PipelineDepthStencilStateCreateInfo{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthTestEnable))-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (depthWriteEnable))-    lift $ poke ((p `plusPtr` 28 :: Ptr CompareOp)) (depthCompareOp)-    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (depthBoundsTestEnable))-    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (stencilTestEnable))-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr StencilOpState)) (front) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 68 :: Ptr StencilOpState)) (back) . ($ ())-    lift $ poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (minDepthBounds))-    lift $ poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (maxDepthBounds))-    lift $ f-  cStructSize = 104-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 28 :: Ptr CompareOp)) (zero)-    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))-    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr StencilOpState)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 68 :: Ptr StencilOpState)) (zero) . ($ ())-    lift $ poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (zero))-    lift $ poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (zero))-    lift $ f--instance FromCStruct PipelineDepthStencilStateCreateInfo where-  peekCStruct p = do-    flags <- peek @PipelineDepthStencilStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags))-    depthTestEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))-    depthWriteEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))-    depthCompareOp <- peek @CompareOp ((p `plusPtr` 28 :: Ptr CompareOp))-    depthBoundsTestEnable <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))-    stencilTestEnable <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))-    front <- peekCStruct @StencilOpState ((p `plusPtr` 40 :: Ptr StencilOpState))-    back <- peekCStruct @StencilOpState ((p `plusPtr` 68 :: Ptr StencilOpState))-    minDepthBounds <- peek @CFloat ((p `plusPtr` 96 :: Ptr CFloat))-    maxDepthBounds <- peek @CFloat ((p `plusPtr` 100 :: Ptr CFloat))-    pure $ PipelineDepthStencilStateCreateInfo-             flags (bool32ToBool depthTestEnable) (bool32ToBool depthWriteEnable) depthCompareOp (bool32ToBool depthBoundsTestEnable) (bool32ToBool stencilTestEnable) front back ((\(CFloat a) -> a) minDepthBounds) ((\(CFloat a) -> a) maxDepthBounds)--instance Zero PipelineDepthStencilStateCreateInfo where-  zero = PipelineDepthStencilStateCreateInfo-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero----- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a--- newly created graphics pipeline------ = Description------ The parameters @basePipelineHandle@ and @basePipelineIndex@ are--- described in more detail in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.------ If any shader stage fails to compile, the compile log will be reported--- back to the application, and--- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV' will be generated.------ == Valid Usage------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be---     a valid handle to a graphics 'Vulkan.Core10.Handles.Pipeline'------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineHandle@ is---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/---     be a valid index into the calling command’s @pCreateInfos@ parameter------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/---     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineHandle@ is not---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/---     be -1------ -   The @stage@ member of each element of @pStages@ /must/ be unique------ -   The geometric shader stages provided in @pStages@ /must/ be either---     from the mesh shading pipeline (@stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'---     or---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV')---     or from the primitive shading pipeline (@stage@ is---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',---     or---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT')------ -   The @stage@ member of one element of @pStages@ /must/ be either---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT' or---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'------ -   The @stage@ member of each element of @pStages@ /must/ not be---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'------ -   If @pStages@ includes a tessellation control shader stage, it /must/---     include a tessellation evaluation shader stage------ -   If @pStages@ includes a tessellation evaluation shader stage, it---     /must/ include a tessellation control shader stage------ -   If @pStages@ includes a tessellation control shader stage and a---     tessellation evaluation shader stage, @pTessellationState@ /must/ be---     a valid pointer to a valid 'PipelineTessellationStateCreateInfo'---     structure------ -   If @pStages@ includes tessellation shader stages, the shader code of---     at least one stage /must/ contain an @OpExecutionMode@ instruction---     that specifies the type of subdivision in the pipeline------ -   If @pStages@ includes tessellation shader stages, and the shader---     code of both stages contain an @OpExecutionMode@ instruction that---     specifies the type of subdivision in the pipeline, they /must/ both---     specify the same subdivision mode------ -   If @pStages@ includes tessellation shader stages, the shader code of---     at least one stage /must/ contain an @OpExecutionMode@ instruction---     that specifies the output patch size in the pipeline------ -   If @pStages@ includes tessellation shader stages, and the shader---     code of both contain an @OpExecutionMode@ instruction that specifies---     the out patch size in the pipeline, they /must/ both specify the---     same patch size------ -   If @pStages@ includes tessellation shader stages, the @topology@---     member of @pInputAssembly@ /must/ be---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'------ -   If the @topology@ member of @pInputAssembly@ is---     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',---     @pStages@ /must/ include tessellation shader stages------ -   If @pStages@ includes a geometry shader stage, and does not include---     any tessellation shader stages, its shader code /must/ contain an---     @OpExecutionMode@ instruction that specifies an input primitive type---     that is---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution compatible>---     with the primitive topology specified in @pInputAssembly@------ -   If @pStages@ includes a geometry shader stage, and also includes---     tessellation shader stages, its shader code /must/ contain an---     @OpExecutionMode@ instruction that specifies an input primitive type---     that is---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution compatible>---     with the primitive topology that is output by the tessellation---     stages------ -   If @pStages@ includes a fragment shader stage and a geometry shader---     stage, and the fragment shader code reads from an input variable---     that is decorated with @PrimitiveID@, then the geometry shader code---     /must/ write to a matching output variable, decorated with---     @PrimitiveID@, in all execution paths------ -   If @pStages@ includes a fragment shader stage, its shader code---     /must/ not read from any input attachment that is defined as---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' in @subpass@------ -   The shader code for the entry points identified by @pStages@, and---     the rest of the state identified by this structure /must/ adhere to---     the pipeline linking rules described in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>---     chapter------ -   If rasterization is not disabled and @subpass@ uses a depth\/stencil---     attachment in @renderPass@ that has a layout of---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'---     in the 'Vulkan.Core10.Pass.AttachmentReference' defined by---     @subpass@, the @depthWriteEnable@ member of @pDepthStencilState@---     /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE'------ -   If rasterization is not disabled and @subpass@ uses a depth\/stencil---     attachment in @renderPass@ that has a layout of---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'---     in the 'Vulkan.Core10.Pass.AttachmentReference' defined by---     @subpass@, the @failOp@, @passOp@ and @depthFailOp@ members of each---     of the @front@ and @back@ members of @pDepthStencilState@ /must/ be---     'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'------ -   If rasterization is not disabled and the subpass uses color---     attachments, then for each color attachment in the subpass the---     @blendEnable@ member of the corresponding element of the---     @pAttachment@ member of @pColorBlendState@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE' if the attached image’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     does not contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT'------ -   If rasterization is not disabled and the subpass uses color---     attachments, the @attachmentCount@ member of @pColorBlendState@---     /must/ be equal to the @colorAttachmentCount@ used to create---     @subpass@------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' or---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT',---     the @pViewports@ member of @pViewportState@ /must/ be a valid---     pointer to an array of @pViewportState->viewportCount@ valid---     'Viewport' structures------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' or---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT',---     the @pScissors@ member of @pViewportState@ /must/ be a valid pointer---     to an array of @pViewportState->scissorCount@---     'Vulkan.Core10.FundamentalTypes.Rect2D' structures------ -   If the wide lines feature is not enabled, and no element of the---     @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH', the---     @lineWidth@ member of @pRasterizationState@ /must/ be @1.0@------ -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is---     'Vulkan.Core10.FundamentalTypes.FALSE', @pViewportState@ /must/ be a---     valid pointer to a valid 'PipelineViewportStateCreateInfo' structure------ -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is---     'Vulkan.Core10.FundamentalTypes.FALSE', @pMultisampleState@ /must/---     be a valid pointer to a valid 'PipelineMultisampleStateCreateInfo'---     structure------ -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is---     'Vulkan.Core10.FundamentalTypes.FALSE', and @subpass@ uses a---     depth\/stencil attachment, @pDepthStencilState@ /must/ be a valid---     pointer to a valid 'PipelineDepthStencilStateCreateInfo' structure------ -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is---     'Vulkan.Core10.FundamentalTypes.FALSE', and @subpass@ uses color---     attachments, @pColorBlendState@ /must/ be a valid pointer to a valid---     'PipelineColorBlendStateCreateInfo' structure------ -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is---     'Vulkan.Core10.FundamentalTypes.FALSE',---     @pColorBlendState->attachmentCount@ /must/ be greater than the index---     of all color attachments that are not---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' for the @subpass@---     index in @renderPass@------ -   If the depth bias clamping feature is not enabled, no element of the---     @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS', and the---     @depthBiasEnable@ member of @pRasterizationState@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', the @depthBiasClamp@ member---     of @pRasterizationState@ /must/ be @0.0@------ -   If the @VK_EXT_depth_range_unrestricted@ extension is not enabled---     and no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS', and---     the @depthBoundsTestEnable@ member of @pDepthStencilState@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', the @minDepthBounds@ and---     @maxDepthBounds@ members of @pDepthStencilState@ /must/ be between---     @0.0@ and @1.0@, inclusive------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',---     and the @sampleLocationsEnable@ member of a---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'---     structure included in the @pNext@ chain of @pMultisampleState@ is---     'Vulkan.Core10.FundamentalTypes.TRUE',---     @sampleLocationsInfo.sampleLocationGridSize.width@ /must/ evenly---     divide---     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.width@---     as returned by---     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'---     with a @samples@ parameter equaling @rasterizationSamples@------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',---     and the @sampleLocationsEnable@ member of a---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'---     structure included in the @pNext@ chain of @pMultisampleState@ is---     'Vulkan.Core10.FundamentalTypes.TRUE',---     @sampleLocationsInfo.sampleLocationGridSize.height@ /must/ evenly---     divide---     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.height@---     as returned by---     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'---     with a @samples@ parameter equaling @rasterizationSamples@------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',---     and the @sampleLocationsEnable@ member of a---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'---     structure included in the @pNext@ chain of @pMultisampleState@ is---     'Vulkan.Core10.FundamentalTypes.TRUE',---     @sampleLocationsInfo.sampleLocationsPerPixel@ /must/ equal---     @rasterizationSamples@------ -   If the @sampleLocationsEnable@ member of a---     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'---     structure included in the @pNext@ chain of @pMultisampleState@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', the fragment shader code---     /must/ not statically use the extended instruction---     @InterpolateAtSample@------ -   @layout@ /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>---     with all shaders specified in @pStages@------ -   If neither the @VK_AMD_mixed_attachment_samples@ nor the---     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if---     @subpass@ uses color and\/or depth\/stencil attachments, then the---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the---     same as the sample count for those subpass attachments------ -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, and---     if @subpass@ uses color and\/or depth\/stencil attachments, then the---     @rasterizationSamples@ member of @pMultisampleState@ /must/ equal---     the maximum of the sample counts of those subpass attachments------ -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and---     if @subpass@ has a depth\/stencil attachment and depth test, stencil---     test, or depth bounds test are enabled, then the---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the---     same as the sample count of the depth\/stencil attachment------ -   If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and---     if @subpass@ has any color attachments, then the---     @rasterizationSamples@ member of @pMultisampleState@ /must/ be---     greater than or equal to the sample count for those subpass---     attachments------ -   If the @VK_NV_coverage_reduction_mode@ extension is enabled, the---     coverage reduction mode specified by---     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV'::@coverageReductionMode@,---     the @rasterizationSamples@ member of @pMultisampleState@ and the---     sample counts for the color and depth\/stencil attachments (if the---     subpass has them) /must/ be a valid combination returned by---     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'------ -   If @subpass@ does not use any color and\/or depth\/stencil---     attachments, then the @rasterizationSamples@ member of---     @pMultisampleState@ /must/ follow the rules for a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments zero-attachment subpass>------ -   @subpass@ /must/ be a valid subpass within @renderPass@------ -   If the @renderPass@ has multiview enabled and @subpass@ has more---     than one bit set in the view mask and @multiviewTessellationShader@---     is not enabled, then @pStages@ /must/ not include tessellation---     shaders------ -   If the @renderPass@ has multiview enabled and @subpass@ has more---     than one bit set in the view mask and @multiviewGeometryShader@ is---     not enabled, then @pStages@ /must/ not include a geometry shader------ -   If the @renderPass@ has multiview enabled and @subpass@ has more---     than one bit set in the view mask, shaders in the pipeline /must/---     not write to the @Layer@ built-in output------ -   If the @renderPass@ has multiview enabled, then all shaders /must/---     not include variables decorated with the @Layer@ built-in decoration---     in their interfaces------ -   @flags@ /must/ not contain the---     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'---     flag------ -   If @pStages@ includes a fragment shader stage and an input---     attachment was referenced by an @aspectMask@ at @renderPass@---     creation time, its shader code /must/ only read from the aspects---     that were specified for that input attachment------ -   The number of resources in @layout@ accessible to each shader stage---     that is used by the pipeline /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV',---     and the @viewportWScalingEnable@ member of a---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'---     structure, included in the @pNext@ chain of @pViewportState@, is---     'Vulkan.Core10.FundamentalTypes.TRUE', the @pViewportWScalings@---     member of the---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'---     /must/ be a pointer to an array of---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@---     valid---     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.ViewportWScalingNV'---     structures------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV',---     and if @pViewportState->pNext@ chain includes a---     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'---     structure, and if its @exclusiveScissorCount@ member is not @0@,---     then its @pExclusiveScissors@ member /must/ be a valid pointer to an---     array of @exclusiveScissorCount@---     'Vulkan.Core10.FundamentalTypes.Rect2D' structures------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV',---     and if @pViewportState->pNext@ chain includes a---     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'---     structure, then its @pShadingRatePalettes@ member /must/ be a valid---     pointer to an array of @viewportCount@ valid---     'Vulkan.Extensions.VK_NV_shading_rate_image.ShadingRatePaletteNV'---     structures------ -   If no element of the @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_EXT',---     and if @pNext@ chain includes a---     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'---     structure, and if its @discardRectangleCount@ member is not @0@,---     then its @pDiscardRectangles@ member /must/ be a valid pointer to an---     array of @discardRectangleCount@---     'Vulkan.Core10.FundamentalTypes.Rect2D' structures------ -   If @pStages@ includes a vertex shader stage, @pVertexInputState@---     /must/ be a valid pointer to a valid---     'PipelineVertexInputStateCreateInfo' structure------ -   If @pStages@ includes a vertex shader stage, @pInputAssemblyState@---     /must/ be a valid pointer to a valid---     'PipelineInputAssemblyStateCreateInfo' structure------ -   The @Xfb@ execution mode /can/ be specified by only one shader stage---     in @pStages@------ -   If any shader stage in @pStages@ specifies @Xfb@ execution mode it---     /must/ be the last vertex processing stage------ -   If a---     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@---     value other than zero is specified, all variables in the output---     interface of the entry point being compiled decorated with---     @Position@, @PointSize@, @ClipDistance@, or @CullDistance@ /must/---     all be decorated with identical @Stream@ values that match the---     @rasterizationStream@------ -   If---     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@---     is zero, or not specified, all variables in the output interface of---     the entry point being compiled decorated with @Position@,---     @PointSize@, @ClipDistance@, or @CullDistance@ /must/ all be---     decorated with a @Stream@ value of zero, or /must/ not specify the---     @Stream@ decoration------ -   If the last vertex processing stage is a geometry shader, and that---     geometry shader uses the @GeometryStreams@ capability, then---     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@---     feature /must/ be enabled------ -   If there are any mesh shader stages in the pipeline there /must/ not---     be any shader stage in the pipeline with a @Xfb@ execution mode------ -   If the @lineRasterizationMode@ member of a---     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'---     structure included in the @pNext@ chain of @pRasterizationState@ is---     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_BRESENHAM_EXT'---     or---     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT'---     and if rasterization is enabled, then the @alphaToCoverageEnable@,---     @alphaToOneEnable@, and @sampleShadingEnable@ members of---     @pMultisampleState@ /must/ all be---     'Vulkan.Core10.FundamentalTypes.FALSE'------ -   If the @stippledLineEnable@ member of---     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'---     is 'Vulkan.Core10.FundamentalTypes.TRUE' and no element of the---     @pDynamicStates@ member of @pDynamicState@ is---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_EXT',---     then the @lineStippleFactor@ member of---     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'---     /must/ be in the range [1,256]------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>---     feature is not enabled, there /must/ be no element of the---     @pDynamicStates@ member of @pDynamicState@ set to---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_CULL_MODE_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRONT_FACE_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT',---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT',---     or 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_OP_EXT'------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     is included in the @pDynamicStates@ array then @viewportCount@---     /must/ be zero------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     is included in the @pDynamicStates@ array then @scissorCount@ /must/---     be zero------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     is included in the @pDynamicStates@ array then---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' /must/ not---     be present------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'---     is included in the @pDynamicStates@ array then---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' /must/ not---     be present------ -   If @flags@ includes---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',---     then the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>---     feature /must/ be enabled------ -   If @flags@ includes---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',---     then all stages /must/ not specify @Xfb@ execution mode------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>---     feature is not enabled, @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'---     or---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.width---     /must/ be greater than or equal to @1@------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.height---     /must/ be greater than or equal to @1@------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.width---     /must/ be a power-of-two value------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.height---     /must/ be a power-of-two value------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.width---     /must/ be less than or equal to @4@------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.height---     /must/ be less than or equal to @4@------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@, and the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate feature>---     is not enabled,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.width---     and---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.height---     /must/ both be equal to @1@------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@, and the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>---     is not enabled,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[0]---     /must/ be---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'------ -   If---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@, and the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-attachmentFragmentShadingRate attachmentFragmentShadingRate feature>---     is not enabled,---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[1]---     /must/ be---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>---     limit is not supported,---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'---     is not included in @pDynamicState@->@pDynamicStates@, and---     'PipelineViewportStateCreateInfo'::@viewportCount@ is greater than---     @1@, entry points specified in @pStages@ /must/ not write to the---     @PrimitiveShadingRateKHR@ built-in------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>---     limit is not supported, and entry points specified in @pStages@---     write to the @ViewportIndex@ built-in, they /must/ not also write to---     the @PrimitiveShadingRateKHR@ built-in------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>---     limit is not supported, and entry points specified in @pStages@---     write to the @ViewportMaskNV@ built-in, they /must/ not also write---     to the @PrimitiveShadingRateKHR@ built-in------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentShadingRateNonTrivialCombinerOps>---     limit is not supported and---     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'---     is not included in @pDynamicState@->@pDynamicStates@, elements of---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@---     /must/ be---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'---     or---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_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---     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',---     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',---     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT',---     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',---     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR',---     or---     'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'---     values------ -   @pStages@ /must/ be a valid pointer to an array of @stageCount@---     valid 'PipelineShaderStageCreateInfo' structures------ -   @pRasterizationState@ /must/ be a valid pointer to a valid---     'PipelineRasterizationStateCreateInfo' structure------ -   If @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid---     pointer to a valid 'PipelineDynamicStateCreateInfo' structure------ -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'---     handle------ -   @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'---     handle------ -   @stageCount@ /must/ be greater than @0@------ -   Each of @basePipelineHandle@, @layout@, and @renderPass@ that are---     valid handles of non-ignored parameters /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Core10.Handles.Pipeline', 'PipelineColorBlendStateCreateInfo',--- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',--- 'PipelineDepthStencilStateCreateInfo', 'PipelineDynamicStateCreateInfo',--- 'PipelineInputAssemblyStateCreateInfo',--- 'Vulkan.Core10.Handles.PipelineLayout',--- 'PipelineMultisampleStateCreateInfo',--- 'PipelineRasterizationStateCreateInfo', 'PipelineShaderStageCreateInfo',--- 'PipelineTessellationStateCreateInfo',--- 'PipelineVertexInputStateCreateInfo', 'PipelineViewportStateCreateInfo',--- 'Vulkan.Core10.Handles.RenderPass',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'createGraphicsPipelines'-data GraphicsPipelineCreateInfo (es :: [Type]) = GraphicsPipelineCreateInfo-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is a bitmask of-    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'-    -- specifying how the pipeline will be generated.-    flags :: PipelineCreateFlags-  , -- | @pStages@ is a pointer to an array of @stageCount@-    -- 'PipelineShaderStageCreateInfo' structures describing the set of the-    -- shader stages to be included in the graphics pipeline.-    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)-  , -- | @pVertexInputState@ is a pointer to a-    -- 'PipelineVertexInputStateCreateInfo' structure. It is ignored if the-    -- pipeline includes a mesh shader stage.-    vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)-  , -- | @pInputAssemblyState@ is a pointer to a-    -- 'PipelineInputAssemblyStateCreateInfo' structure which determines input-    -- assembly behavior, as described in-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing Drawing Commands>.-    -- It is ignored if the pipeline includes a mesh shader stage.-    inputAssemblyState :: Maybe PipelineInputAssemblyStateCreateInfo-  , -- | @pTessellationState@ is a pointer to a-    -- 'PipelineTessellationStateCreateInfo' structure, and is ignored if the-    -- pipeline does not include a tessellation control shader stage and-    -- tessellation evaluation shader stage.-    tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)-  , -- | @pViewportState@ is a pointer to a 'PipelineViewportStateCreateInfo'-    -- structure, and is ignored if the pipeline has rasterization disabled.-    viewportState :: Maybe (SomeStruct PipelineViewportStateCreateInfo)-  , -- | @pRasterizationState@ is a pointer to a-    -- 'PipelineRasterizationStateCreateInfo' structure.-    rasterizationState :: SomeStruct PipelineRasterizationStateCreateInfo-  , -- | @pMultisampleState@ is a pointer to a-    -- 'PipelineMultisampleStateCreateInfo' structure, and is ignored if the-    -- pipeline has rasterization disabled.-    multisampleState :: Maybe (SomeStruct PipelineMultisampleStateCreateInfo)-  , -- | @pDepthStencilState@ is a pointer to a-    -- 'PipelineDepthStencilStateCreateInfo' structure, and is ignored if the-    -- pipeline has rasterization disabled or if the subpass of the render pass-    -- the pipeline is created against does not use a depth\/stencil-    -- attachment.-    depthStencilState :: Maybe PipelineDepthStencilStateCreateInfo-  , -- | @pColorBlendState@ is a pointer to a 'PipelineColorBlendStateCreateInfo'-    -- structure, and is ignored if the pipeline has rasterization disabled or-    -- if the subpass of the render pass the pipeline is created against does-    -- not use any color attachments.-    colorBlendState :: Maybe (SomeStruct PipelineColorBlendStateCreateInfo)-  , -- | @pDynamicState@ is a pointer to a 'PipelineDynamicStateCreateInfo'-    -- structure, and is used to indicate which properties of the pipeline-    -- state object are dynamic and /can/ be changed independently of the-    -- pipeline state. This /can/ be @NULL@, which means no state in the-    -- pipeline is considered dynamic.-    dynamicState :: Maybe PipelineDynamicStateCreateInfo-  , -- | @layout@ is the description of binding locations used by both the-    -- pipeline and descriptor sets used with the pipeline.-    layout :: PipelineLayout-  , -- | @renderPass@ is a handle to a render pass object describing the-    -- environment in which the pipeline will be used; the pipeline /must/ only-    -- be used with an instance of any render pass compatible with the one-    -- provided. See-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility>-    -- for more information.-    renderPass :: RenderPass-  , -- | @subpass@ is the index of the subpass in the render pass where this-    -- pipeline will be used.-    subpass :: Word32-  , -- | @basePipelineHandle@ is a pipeline to derive from.-    basePipelineHandle :: Pipeline-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use-    -- as a pipeline to derive from.-    basePipelineIndex :: Int32-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (GraphicsPipelineCreateInfo (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (GraphicsPipelineCreateInfo es)--instance Extensible GraphicsPipelineCreateInfo where-  extensibleType = STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO-  setNext x next = x{next = next}-  getNext GraphicsPipelineCreateInfo{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends GraphicsPipelineCreateInfo e => b) -> Maybe b-  extends _ f+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PipelineFragmentShadingRateEnumStateCreateInfoNV)+import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PipelineFragmentShadingRateStateCreateInfoKHR)+import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags)+import Vulkan.Core10.Handles (PipelineLayout)+import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags)+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conservative_rasterization (PipelineRasterizationConservativeStateCreateInfoEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PipelineRasterizationDepthClipStateCreateInfoEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_line_rasterization (PipelineRasterizationLineStateCreateInfoEXT)+import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags)+import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_rasterization_order (PipelineRasterizationStateRasterizationOrderAMD)+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PipelineRasterizationStateStreamCreateInfoEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PipelineRepresentativeFragmentTestStateCreateInfoNV)+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_sample_locations (PipelineSampleLocationsStateCreateInfoEXT)+import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subgroup_size_control (PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT)+import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_maintenance2 (PipelineTessellationDomainOriginStateCreateInfo)+import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags)+import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_divisor (PipelineVertexInputDivisorStateCreateInfoEXT)+import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportCoarseSampleOrderStateCreateInfoNV)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PipelineViewportExclusiveScissorStateCreateInfoNV)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PipelineViewportShadingRateImageStateCreateInfoNV)+import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_viewport_swizzle (PipelineViewportSwizzleStateCreateInfoNV)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_clip_space_w_scaling (PipelineViewportWScalingStateCreateInfoNV)+import Vulkan.CStruct.Extends (PokeChain)+import Vulkan.CStruct.Extends (PokeChain(..))+import Vulkan.Core10.Enums.PolygonMode (PolygonMode)+import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology)+import Vulkan.Core10.FundamentalTypes (Rect2D)+import Vulkan.Core10.Handles (RenderPass)+import Vulkan.Core10.Enums.Result (Result)+import Vulkan.Core10.Enums.Result (Result(..))+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits(SampleCountFlagBits))+import Vulkan.Core10.FundamentalTypes (SampleMask)+import Vulkan.Core10.Handles (ShaderModule)+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits)+import Vulkan.CStruct.Extends (SomeStruct)+import Vulkan.CStruct.Extends (SomeStruct(..))+import Vulkan.Core10.Enums.StencilOp (StencilOp)+import Vulkan.Core10.Enums.StructureType (StructureType)+import Vulkan.CStruct (ToCStruct)+import Vulkan.CStruct (ToCStruct(..))+import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate)+import Vulkan.Exception (VulkanException(..))+import Vulkan.Zero (Zero(..))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO))+import Vulkan.Core10.Enums.Result (Result(SUCCESS))+import Vulkan.Core10.Enums.BlendFactor (BlendFactor(..))+import Vulkan.Core10.Enums.BlendOp (BlendOp(..))+import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlagBits(..))+import Vulkan.Core10.Enums.ColorComponentFlagBits (ColorComponentFlags)+import Vulkan.Core10.Enums.CompareOp (CompareOp(..))+import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlagBits(..))+import Vulkan.Core10.Enums.CullModeFlagBits (CullModeFlags)+import Vulkan.Core10.Enums.DynamicState (DynamicState(..))+import Vulkan.Core10.Enums.FrontFace (FrontFace(..))+import Vulkan.Core10.Enums.LogicOp (LogicOp(..))+import Vulkan.Core10.Handles (Pipeline(..))+import Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags (PipelineColorBlendStateCreateFlags(..))+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlagBits(..))+import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)+import Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags (PipelineDepthStencilStateCreateFlags(..))+import Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags (PipelineDynamicStateCreateFlags(..))+import Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags (PipelineInputAssemblyStateCreateFlags(..))+import Vulkan.Core10.Enums.PipelineLayoutCreateFlags (PipelineLayoutCreateFlags(..))+import Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags (PipelineMultisampleStateCreateFlags(..))+import Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags (PipelineRasterizationStateCreateFlags(..))+import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlagBits(..))+import Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits (PipelineShaderStageCreateFlags)+import Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags (PipelineTessellationStateCreateFlags(..))+import Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags (PipelineVertexInputStateCreateFlags(..))+import Vulkan.Core10.Enums.PipelineViewportStateCreateFlags (PipelineViewportStateCreateFlags(..))+import Vulkan.Core10.Enums.PolygonMode (PolygonMode(..))+import Vulkan.Core10.Enums.PrimitiveTopology (PrimitiveTopology(..))+import Vulkan.Core10.FundamentalTypes (SampleMask)+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlagBits(..))+import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)+import Vulkan.Core10.Enums.StencilOp (StencilOp(..))+import Vulkan.Core10.Enums.VertexInputRate (VertexInputRate(..))+foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCreateGraphicsPipelines+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct GraphicsPipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct GraphicsPipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result++-- | vkCreateGraphicsPipelines - Create graphics pipelines+--+-- = Description+--+-- The 'GraphicsPipelineCreateInfo' structure includes an array of shader+-- create info structures containing all the desired active shader stages,+-- as well as creation info to define all relevant fixed-function stages,+-- and a pipeline layout.+--+-- == Valid Usage+--+-- -   #VUID-vkCreateGraphicsPipelines-flags-00720# If the @flags@ member+--     of any element of @pCreateInfos@ contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and the @basePipelineIndex@ member of that same element is not+--     @-1@, @basePipelineIndex@ /must/ be less than the index into+--     @pCreateInfos@ that corresponds to that element+--+-- -   #VUID-vkCreateGraphicsPipelines-flags-00721# If the @flags@ member+--     of any element of @pCreateInfos@ contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, the base pipeline /must/ have been created with the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'+--     flag set+--+-- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-02876# If+--     @pipelineCache@ was created with+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',+--     host access to @pipelineCache@ /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>+--+-- Note+--+-- An implicit cache may be provided by the implementation or a layer. For+-- this reason, it is still valid to set+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'+-- on @flags@ for any element of @pCreateInfos@ while passing+-- 'Vulkan.Core10.APIConstants.NULL_HANDLE' for @pipelineCache@.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCreateGraphicsPipelines-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-parameter# If+--     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+--     @pipelineCache@ /must/ be a valid+--     'Vulkan.Core10.Handles.PipelineCache' handle+--+-- -   #VUID-vkCreateGraphicsPipelines-pCreateInfos-parameter#+--     @pCreateInfos@ /must/ be a valid pointer to an array of+--     @createInfoCount@ valid 'GraphicsPipelineCreateInfo' structures+--+-- -   #VUID-vkCreateGraphicsPipelines-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure+--+-- -   #VUID-vkCreateGraphicsPipelines-pPipelines-parameter# @pPipelines@+--     /must/ be a valid pointer to an array of @createInfoCount@+--     'Vulkan.Core10.Handles.Pipeline' handles+--+-- -   #VUID-vkCreateGraphicsPipelines-createInfoCount-arraylength#+--     @createInfoCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCreateGraphicsPipelines-pipelineCache-parent# If+--     @pipelineCache@ is a valid handle, it /must/ have been created,+--     allocated, or retrieved from @device@+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+--     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'+--+-- = See Also+--+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',+-- 'Vulkan.Core10.Handles.Device', 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'+createGraphicsPipelines :: forall io+                         . (MonadIO io)+                        => -- | @device@ is the logical device that creates the graphics pipelines.+                           Device+                        -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',+                           -- indicating that pipeline caching is disabled; or the handle of a valid+                           -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>+                           -- object, in which case use of that cache is enabled for the duration of+                           -- the command.+                           PipelineCache+                        -> -- | @pCreateInfos@ is a pointer to an array of 'GraphicsPipelineCreateInfo'+                           -- structures.+                           ("createInfos" ::: Vector (SomeStruct GraphicsPipelineCreateInfo))+                        -> -- | @pAllocator@ controls host memory allocation as described in the+                           -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>+                           -- chapter.+                           ("allocator" ::: Maybe AllocationCallbacks)+                        -> io (Result, ("pipelines" ::: Vector Pipeline))+createGraphicsPipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do+  let vkCreateGraphicsPipelinesPtr = pVkCreateGraphicsPipelines (deviceCmds (device :: Device))+  lift $ unless (vkCreateGraphicsPipelinesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateGraphicsPipelines is null" Nothing Nothing+  let vkCreateGraphicsPipelines' = mkVkCreateGraphicsPipelines vkCreateGraphicsPipelinesPtr+  pPCreateInfos <- ContT $ allocaBytesAligned @(GraphicsPipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 144) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (144 * (i)) :: Ptr (GraphicsPipelineCreateInfo _))) (e) . ($ ())) (createInfos)+  pAllocator <- case (allocator) of+    Nothing -> pure nullPtr+    Just j -> ContT $ withCStruct (j)+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free+  r <- lift $ vkCreateGraphicsPipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))+  pure $ (r, pPipelines)++-- | A convenience wrapper to make a compatible pair of calls to+-- 'createGraphicsPipelines' and 'destroyPipeline'+--+-- To ensure that 'destroyPipeline' is always called: pass+-- 'Control.Exception.bracket' (or the allocate function from your+-- favourite resource management library) as the first argument.+-- To just extract the pair pass '(,)' as the first argument.+--+withGraphicsPipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct GraphicsPipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r+withGraphicsPipelines device pipelineCache pCreateInfos pAllocator b =+  b (createGraphicsPipelines device pipelineCache pCreateInfos pAllocator)+    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCreateComputePipelines+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ComputePipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ComputePipelineCreateInfo) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result++-- | vkCreateComputePipelines - Creates a new compute pipeline object+--+-- == Valid Usage+--+-- -   #VUID-vkCreateComputePipelines-flags-00695# If the @flags@ member of+--     any element of @pCreateInfos@ contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and the @basePipelineIndex@ member of that same element is not+--     @-1@, @basePipelineIndex@ /must/ be less than the index into+--     @pCreateInfos@ that corresponds to that element+--+-- -   #VUID-vkCreateComputePipelines-flags-00696# If the @flags@ member of+--     any element of @pCreateInfos@ contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, the base pipeline /must/ have been created with the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'+--     flag set+--+-- -   #VUID-vkCreateComputePipelines-pipelineCache-02873# If+--     @pipelineCache@ was created with+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',+--     host access to @pipelineCache@ /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCreateComputePipelines-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkCreateComputePipelines-pipelineCache-parameter# If+--     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+--     @pipelineCache@ /must/ be a valid+--     'Vulkan.Core10.Handles.PipelineCache' handle+--+-- -   #VUID-vkCreateComputePipelines-pCreateInfos-parameter#+--     @pCreateInfos@ /must/ be a valid pointer to an array of+--     @createInfoCount@ valid 'ComputePipelineCreateInfo' structures+--+-- -   #VUID-vkCreateComputePipelines-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+--+-- -   #VUID-vkCreateComputePipelines-pPipelines-parameter# @pPipelines@+--     /must/ be a valid pointer to an array of @createInfoCount@+--     'Vulkan.Core10.Handles.Pipeline' handles+--+-- -   #VUID-vkCreateComputePipelines-createInfoCount-arraylength#+--     @createInfoCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCreateComputePipelines-pipelineCache-parent# If+--     @pipelineCache@ is a valid handle, it /must/ have been created,+--     allocated, or retrieved from @device@+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+--     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV'+--+-- = See Also+--+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',+-- 'ComputePipelineCreateInfo', 'Vulkan.Core10.Handles.Device',+-- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'+createComputePipelines :: forall io+                        . (MonadIO io)+                       => -- | @device@ is the logical device that creates the compute pipelines.+                          Device+                       -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',+                          -- indicating that pipeline caching is disabled; or the handle of a valid+                          -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>+                          -- object, in which case use of that cache is enabled for the duration of+                          -- the command.+                          PipelineCache+                       -> -- | @pCreateInfos@ is a pointer to an array of 'ComputePipelineCreateInfo'+                          -- structures.+                          ("createInfos" ::: Vector (SomeStruct ComputePipelineCreateInfo))+                       -> -- | @pAllocator@ controls host memory allocation as described in the+                          -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>+                          -- chapter.+                          ("allocator" ::: Maybe AllocationCallbacks)+                       -> io (Result, ("pipelines" ::: Vector Pipeline))+createComputePipelines device pipelineCache createInfos allocator = liftIO . evalContT $ do+  let vkCreateComputePipelinesPtr = pVkCreateComputePipelines (deviceCmds (device :: Device))+  lift $ unless (vkCreateComputePipelinesPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateComputePipelines is null" Nothing Nothing+  let vkCreateComputePipelines' = mkVkCreateComputePipelines vkCreateComputePipelinesPtr+  pPCreateInfos <- ContT $ allocaBytesAligned @(ComputePipelineCreateInfo _) ((Data.Vector.length (createInfos)) * 96) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (96 * (i)) :: Ptr (ComputePipelineCreateInfo _))) (e) . ($ ())) (createInfos)+  pAllocator <- case (allocator) of+    Nothing -> pure nullPtr+    Just j -> ContT $ withCStruct (j)+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free+  r <- lift $ vkCreateComputePipelines' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))+  pure $ (r, pPipelines)++-- | A convenience wrapper to make a compatible pair of calls to+-- 'createComputePipelines' and 'destroyPipeline'+--+-- To ensure that 'destroyPipeline' is always called: pass+-- 'Control.Exception.bracket' (or the allocate function from your+-- favourite resource management library) as the first argument.+-- To just extract the pair pass '(,)' as the first argument.+--+withComputePipelines :: forall io r . MonadIO io => Device -> PipelineCache -> Vector (SomeStruct ComputePipelineCreateInfo) -> Maybe AllocationCallbacks -> (io (Result, Vector Pipeline) -> ((Result, Vector Pipeline) -> io ()) -> r) -> r+withComputePipelines device pipelineCache pCreateInfos pAllocator b =+  b (createComputePipelines device pipelineCache pCreateInfos pAllocator)+    (\(_, o1) -> traverse_ (\o1Elem -> destroyPipeline device o1Elem pAllocator) o1)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkDestroyPipeline+  :: FunPtr (Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Pipeline -> Ptr AllocationCallbacks -> IO ()++-- | vkDestroyPipeline - Destroy a pipeline object+--+-- == Valid Usage+--+-- -   #VUID-vkDestroyPipeline-pipeline-00765# All submitted commands that+--     refer to @pipeline@ /must/ have completed execution+--+-- -   #VUID-vkDestroyPipeline-pipeline-00766# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+--     provided when @pipeline@ was created, a compatible set of callbacks+--     /must/ be provided here+--+-- -   #VUID-vkDestroyPipeline-pipeline-00767# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+--     provided when @pipeline@ was created, @pAllocator@ /must/ be @NULL@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkDestroyPipeline-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkDestroyPipeline-pipeline-parameter# If @pipeline@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @pipeline@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Pipeline' handle+--+-- -   #VUID-vkDestroyPipeline-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+--+-- -   #VUID-vkDestroyPipeline-pipeline-parent# If @pipeline@ is a valid+--     handle, it /must/ have been created, allocated, or retrieved from+--     @device@+--+-- == Host Synchronization+--+-- -   Host access to @pipeline@ /must/ be externally synchronized+--+-- = See Also+--+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'+destroyPipeline :: forall io+                 . (MonadIO io)+                => -- | @device@ is the logical device that destroys the pipeline.+                   Device+                -> -- | @pipeline@ is the handle of the pipeline to destroy.+                   Pipeline+                -> -- | @pAllocator@ controls host memory allocation as described in the+                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>+                   -- chapter.+                   ("allocator" ::: Maybe AllocationCallbacks)+                -> io ()+destroyPipeline device pipeline allocator = liftIO . evalContT $ do+  let vkDestroyPipelinePtr = pVkDestroyPipeline (deviceCmds (device :: Device))+  lift $ unless (vkDestroyPipelinePtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyPipeline is null" Nothing Nothing+  let vkDestroyPipeline' = mkVkDestroyPipeline vkDestroyPipelinePtr+  pAllocator <- case (allocator) of+    Nothing -> pure nullPtr+    Just j -> ContT $ withCStruct (j)+  lift $ vkDestroyPipeline' (deviceHandle (device)) (pipeline) pAllocator+  pure $ ()+++-- | VkViewport - Structure specifying a viewport+--+-- = Description+--+-- The framebuffer depth coordinate @z@f /may/ be represented using either+-- a fixed-point or floating-point representation. However, a+-- floating-point representation /must/ be used if the depth\/stencil+-- attachment has a floating-point depth component. If an m-bit fixed-point+-- representation is used, we assume that it represents each value+-- \(\frac{k}{2^m - 1}\), where k ∈ { 0, 1, …​, 2m-1 }, as k (e.g. 1.0 is+-- represented in binary as a string of all ones).+--+-- The viewport parameters shown in the above equations are found from+-- these values as+--+-- -   ox = @x@ + @width@ \/ 2+--+-- -   oy = @y@ + @height@ \/ 2+--+-- -   oz = @minDepth@+--+-- -   px = @width@+--+-- -   py = @height@+--+-- -   pz = @maxDepth@ - @minDepth@.+--+-- If a render pass transform is enabled, the values (px,py) and (ox, oy)+-- defining the viewport are transformed as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-renderpass-transform render pass transform>+-- before participating in the viewport transform.+--+-- The application /can/ specify a negative term for @height@, which has+-- the effect of negating the y coordinate in clip space before performing+-- the transform. When using a negative @height@, the application /should/+-- also adjust the @y@ value to point to the lower left corner of the+-- viewport instead of the upper left corner. Using the negative @height@+-- allows the application to avoid having to negate the y component of the+-- @Position@ output from the last vertex processing stage in shaders that+-- also target other graphics APIs.+--+-- The width and height of the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxViewportDimensions implementation-dependent maximum viewport dimensions>+-- /must/ be greater than or equal to the width and height of the largest+-- image which /can/ be created and attached to a framebuffer.+--+-- The floating-point viewport bounds are represented with an+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-viewportSubPixelBits implementation-dependent precision>.+--+-- == Valid Usage+--+-- -   #VUID-VkViewport-width-01770# @width@ /must/ be greater than @0.0@+--+-- -   #VUID-VkViewport-width-01771# @width@ /must/ be less than or equal+--     to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[0]+--+-- -   #VUID-VkViewport-height-01773# The absolute value of @height@ /must/+--     be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewportDimensions@[1]+--+-- -   #VUID-VkViewport-x-01774# @x@ /must/ be greater than or equal to+--     @viewportBoundsRange@[0]+--+-- -   #VUID-VkViewport-x-01232# (@x@ + @width@) /must/ be less than or+--     equal to @viewportBoundsRange@[1]+--+-- -   #VUID-VkViewport-y-01775# @y@ /must/ be greater than or equal to+--     @viewportBoundsRange@[0]+--+-- -   #VUID-VkViewport-y-01776# @y@ /must/ be less than or equal to+--     @viewportBoundsRange@[1]+--+-- -   #VUID-VkViewport-y-01777# (@y@ + @height@) /must/ be greater than or+--     equal to @viewportBoundsRange@[0]+--+-- -   #VUID-VkViewport-y-01233# (@y@ + @height@) /must/ be less than or+--     equal to @viewportBoundsRange@[1]+--+-- -   #VUID-VkViewport-minDepth-01234# Unless+--     @VK_EXT_depth_range_unrestricted@ extension is enabled @minDepth@+--     /must/ be between @0.0@ and @1.0@, inclusive+--+-- -   #VUID-VkViewport-maxDepth-01235# Unless+--     @VK_EXT_depth_range_unrestricted@ extension is enabled @maxDepth@+--     /must/ be between @0.0@ and @1.0@, inclusive+--+-- = See Also+--+-- 'PipelineViewportStateCreateInfo',+-- 'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport',+-- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT'+data Viewport = Viewport+  { -- | @x@ and @y@ are the viewport’s upper left corner (x,y).+    x :: Float+  , -- No documentation found for Nested "VkViewport" "y"+    y :: Float+  , -- | @width@ and @height@ are the viewport’s width and height, respectively.+    width :: Float+  , -- No documentation found for Nested "VkViewport" "height"+    height :: Float+  , -- | @minDepth@ and @maxDepth@ are the depth range for the viewport. It is+    -- valid for @minDepth@ to be greater than or equal to @maxDepth@.+    minDepth :: Float+  , -- No documentation found for Nested "VkViewport" "maxDepth"+    maxDepth :: Float+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (Viewport)+#endif+deriving instance Show Viewport++instance ToCStruct Viewport where+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p Viewport{..} f = do+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (x))+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (y))+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (width))+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (height))+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (minDepth))+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxDepth))+    f+  cStructSize = 24+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))+    f++instance FromCStruct Viewport where+  peekCStruct p = do+    x <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))+    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))+    width <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))+    height <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))+    minDepth <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))+    maxDepth <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))+    pure $ Viewport+             ((\(CFloat a) -> a) x) ((\(CFloat a) -> a) y) ((\(CFloat a) -> a) width) ((\(CFloat a) -> a) height) ((\(CFloat a) -> a) minDepth) ((\(CFloat a) -> a) maxDepth)++instance Storable Viewport where+  sizeOf ~_ = 24+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero Viewport where+  zero = Viewport+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkSpecializationMapEntry - Structure specifying a specialization map+-- entry+--+-- = Description+--+-- If a @constantID@ value is not a specialization constant ID used in the+-- shader, that map entry does not affect the behavior of the pipeline.+--+-- == Valid Usage+--+-- -   #VUID-VkSpecializationMapEntry-constantID-00776# For a @constantID@+--     specialization constant declared in a shader, @size@ /must/ match+--     the byte size of the @constantID@. If the specialization constant is+--     of type @boolean@, @size@ /must/ be the byte size of+--     'Vulkan.Core10.FundamentalTypes.Bool32'+--+-- = See Also+--+-- 'SpecializationInfo'+data SpecializationMapEntry = SpecializationMapEntry+  { -- | @constantID@ is the ID of the specialization constant in SPIR-V.+    constantID :: Word32+  , -- | @offset@ is the byte offset of the specialization constant value within+    -- the supplied data buffer.+    offset :: Word32+  , -- | @size@ is the byte size of the specialization constant value within the+    -- supplied data buffer.+    size :: Word64+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (SpecializationMapEntry)+#endif+deriving instance Show SpecializationMapEntry++instance ToCStruct SpecializationMapEntry where+  withCStruct x f = allocaBytesAligned 16 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p SpecializationMapEntry{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (constantID)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (offset)+    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (size))+    f+  cStructSize = 16+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 8 :: Ptr CSize)) (CSize (zero))+    f++instance FromCStruct SpecializationMapEntry where+  peekCStruct p = do+    constantID <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))+    offset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    size <- peek @CSize ((p `plusPtr` 8 :: Ptr CSize))+    pure $ SpecializationMapEntry+             constantID offset ((\(CSize a) -> a) size)++instance Storable SpecializationMapEntry where+  sizeOf ~_ = 16+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero SpecializationMapEntry where+  zero = SpecializationMapEntry+           zero+           zero+           zero+++-- | VkSpecializationInfo - Structure specifying specialization info+--+-- = Description+--+-- @pMapEntries@ is a pointer to a 'SpecializationMapEntry' structure.+--+-- == Valid Usage+--+-- -   #VUID-VkSpecializationInfo-offset-00773# The @offset@ member of each+--     element of @pMapEntries@ /must/ be less than @dataSize@+--+-- -   #VUID-VkSpecializationInfo-pMapEntries-00774# The @size@ member of+--     each element of @pMapEntries@ /must/ be less than or equal to+--     @dataSize@ minus @offset@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkSpecializationInfo-pMapEntries-parameter# If @mapEntryCount@+--     is not @0@, @pMapEntries@ /must/ be a valid pointer to an array of+--     @mapEntryCount@ valid 'SpecializationMapEntry' structures+--+-- -   #VUID-VkSpecializationInfo-pData-parameter# If @dataSize@ is not+--     @0@, @pData@ /must/ be a valid pointer to an array of @dataSize@+--     bytes+--+-- = See Also+--+-- 'PipelineShaderStageCreateInfo', 'SpecializationMapEntry'+data SpecializationInfo = SpecializationInfo+  { -- | @pMapEntries@ is a pointer to an array of 'SpecializationMapEntry'+    -- structures which map constant IDs to offsets in @pData@.+    mapEntries :: Vector SpecializationMapEntry+  , -- | @dataSize@ is the byte size of the @pData@ buffer.+    dataSize :: Word64+  , -- | @pData@ contains the actual constant values to specialize with.+    data' :: Ptr ()+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (SpecializationInfo)+#endif+deriving instance Show SpecializationInfo++instance ToCStruct SpecializationInfo where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p SpecializationInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (mapEntries)) :: Word32))+    pPMapEntries' <- ContT $ allocaBytesAligned @SpecializationMapEntry ((Data.Vector.length (mapEntries)) * 16) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e) . ($ ())) (mapEntries)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')+    lift $ poke ((p `plusPtr` 16 :: Ptr CSize)) (CSize (dataSize))+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (data')+    lift $ f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    pPMapEntries' <- ContT $ allocaBytesAligned @SpecializationMapEntry ((Data.Vector.length (mempty)) * 16) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPMapEntries' `plusPtr` (16 * (i)) :: Ptr SpecializationMapEntry) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry))) (pPMapEntries')+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)+    lift $ f++instance FromCStruct SpecializationInfo where+  peekCStruct p = do+    mapEntryCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))+    pMapEntries <- peek @(Ptr SpecializationMapEntry) ((p `plusPtr` 8 :: Ptr (Ptr SpecializationMapEntry)))+    pMapEntries' <- generateM (fromIntegral mapEntryCount) (\i -> peekCStruct @SpecializationMapEntry ((pMapEntries `advancePtrBytes` (16 * (i)) :: Ptr SpecializationMapEntry)))+    dataSize <- peek @CSize ((p `plusPtr` 16 :: Ptr CSize))+    pData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))+    pure $ SpecializationInfo+             pMapEntries' ((\(CSize a) -> a) dataSize) pData++instance Zero SpecializationInfo where+  zero = SpecializationInfo+           mempty+           zero+           zero+++-- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a+-- newly created pipeline shader stage+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00704# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @stage@ /must/ not be+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @stage@ /must/ not be+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'+--     or+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02091# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shader>+--     feature is not enabled, @stage@ /must/ not be+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02092# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shader>+--     feature is not enabled, @stage@ /must/ not be+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00706# @stage@ /must/+--     not be+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL_GRAPHICS',+--     or 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL'+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-pName-00707# @pName@ /must/ be+--     the name of an @OpEntryPoint@ in @module@ with an execution model+--     that matches @stage@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708# If the+--     identified entry point includes any variable in its interface that+--     is declared with the @ClipDistance@ @BuiltIn@ decoration, that+--     variable /must/ not have an array size greater than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxClipDistances@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709# If the+--     identified entry point includes any variable in its interface that+--     is declared with the @CullDistance@ @BuiltIn@ decoration, that+--     variable /must/ not have an array size greater than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCullDistances@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710#+--     If the identified entry point includes any variables in its+--     interface that are declared with the @ClipDistance@ or+--     @CullDistance@ @BuiltIn@ decoration, those variables /must/ not have+--     array sizes which sum to more than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxCombinedClipAndCullDistances@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711# If+--     the identified entry point includes any variable in its interface+--     that is declared with the+--     'Vulkan.Core10.FundamentalTypes.SampleMask' @BuiltIn@ decoration,+--     that variable /must/ not have an array size greater than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSampleMaskWords@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00712# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',+--     the identified entry point /must/ not include any input variable in+--     its interface that is decorated with @CullDistance@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00713# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'+--     or+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',+--     and the identified entry point has an @OpExecutionMode@ instruction+--     that specifies a patch size with @OutputVertices@, the patch size+--     /must/ be greater than @0@ and less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00714# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',+--     the identified entry point /must/ have an @OpExecutionMode@+--     instruction that specifies a maximum output vertex count that is+--     greater than @0@ and less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryOutputVertices@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00715# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',+--     the identified entry point /must/ have an @OpExecutionMode@+--     instruction that specifies an invocation count that is greater than+--     @0@ and less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxGeometryShaderInvocations@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02596# If @stage@ is a+--     vertex processing stage, and the identified entry point writes to+--     @Layer@ for any primitive, it /must/ write the same value to @Layer@+--     for all vertices of a given primitive+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02597# If @stage@ is a+--     vertex processing stage, and the identified entry point writes to+--     @ViewportIndex@ for any primitive, it /must/ write the same value to+--     @ViewportIndex@ for all vertices of a given primitive+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00718# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',+--     the identified entry point /must/ not include any output variables+--     in its interface decorated with @CullDistance@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-00719# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',+--     and the identified entry point writes to @FragDepth@ in any+--     execution path, it /must/ write to @FragDepth@ in all execution+--     paths+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-01511# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',+--     and the identified entry point writes to @FragStencilRefEXT@ in any+--     execution path, it /must/ write to @FragStencilRefEXT@ in all+--     execution paths+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02093# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',+--     the identified entry point /must/ have an @OpExecutionMode@+--     instruction that specifies a maximum output vertex count,+--     @OutputVertices@, that is greater than @0@ and less than or equal to+--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputVertices@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-02094# If @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV',+--     the identified entry point /must/ have an @OpExecutionMode@+--     instruction that specifies a maximum output primitive count,+--     @OutputPrimitivesNV@, that is greater than @0@ and less than or+--     equal to+--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderPropertiesNV'::@maxMeshOutputPrimitives@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02784# If @flags@ has+--     the+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'+--     flag set, the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>+--     feature /must/ be enabled+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02785# If @flags@ has+--     the+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'+--     flag set, the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-computeFullSubgroups computeFullSubgroups>+--     feature /must/ be enabled+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02754# If a+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'+--     structure is included in the @pNext@ chain, @flags@ /must/ not have+--     the+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'+--     flag set+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02755# If a+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'+--     structure is included in the @pNext@ chain, the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroupSizeControl subgroupSizeControl>+--     feature /must/ be enabled, and @stage@ /must/ be a valid bit+--     specified in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-required-subgroup-size-stages requiredSubgroupSizeStages>+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02756# If a+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'+--     structure is included in the @pNext@ chain and @stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT',+--     the local workgroup size of the shader /must/ be less than or equal+--     to the product of+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'::@requiredSubgroupSize@+--     and+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroups-per-workgroup maxComputeWorkgroupSubgroups>+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-02757# If a+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'+--     structure is included in the @pNext@ chain, and @flags@ has the+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'+--     flag set, the local workgroup size in the X dimension of the+--     pipeline /must/ be a multiple of+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'::@requiredSubgroupSize@+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02758# If @flags@ has+--     both the+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'+--     and+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'+--     flags set, the local workgroup size in the X dimension of the+--     pipeline /must/ be a multiple of+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-02759# If @flags@ has+--     the+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'+--     flag set and @flags@ does not have the+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'+--     flag set and no+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'+--     structure is included in the @pNext@ chain, the local workgroup size+--     in the X dimension of the pipeline /must/ be a multiple of+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-module-04145# The SPIR-V code+--     that was used to create @module@ /must/ be valid as described by the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirv-spec Khronos SPIR-V Specification>+--     after applying the specializations provided in+--     @pSpecializationInfo@, if any, and then converting all+--     specialization constants into fixed constants.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO'+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-pNext-pNext# @pNext@ /must/ be+--     @NULL@ or a pointer to a valid instance of+--     'Vulkan.Extensions.VK_EXT_subgroup_size_control.PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-flags-parameter# @flags@+--     /must/ be a valid combination of+--     'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'+--     values+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-stage-parameter# @stage@+--     /must/ be a valid+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-module-parameter# @module@+--     /must/ be a valid 'Vulkan.Core10.Handles.ShaderModule' handle+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-pName-parameter# @pName@+--     /must/ be a null-terminated UTF-8 string+--+-- -   #VUID-VkPipelineShaderStageCreateInfo-pSpecializationInfo-parameter#+--     If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/+--     be a valid pointer to a valid 'SpecializationInfo' structure+--+-- = See Also+--+-- 'ComputePipelineCreateInfo', 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',+-- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlags',+-- 'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR',+-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',+-- 'Vulkan.Core10.Handles.ShaderModule',+-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits',+-- 'SpecializationInfo', 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineShaderStageCreateInfo (es :: [Type]) = PipelineShaderStageCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is a bitmask of+    -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PipelineShaderStageCreateFlagBits'+    -- specifying how the pipeline shader stage will be generated.+    flags :: PipelineShaderStageCreateFlags+  , -- | @stage@ is a+    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value+    -- specifying a single pipeline stage.+    stage :: ShaderStageFlagBits+  , -- | @module@ is a 'Vulkan.Core10.Handles.ShaderModule' object containing the+    -- shader for this stage.+    module' :: ShaderModule+  , -- | @pName@ is a pointer to a null-terminated UTF-8 string specifying the+    -- entry point name of the shader for this stage.+    name :: ByteString+  , -- | @pSpecializationInfo@ is a pointer to a 'SpecializationInfo' structure,+    -- as described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-specialization-constants Specialization Constants>,+    -- or @NULL@.+    specializationInfo :: Maybe SpecializationInfo+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineShaderStageCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (PipelineShaderStageCreateInfo es)++instance Extensible PipelineShaderStageCreateInfo where+  extensibleType = STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO+  setNext x next = x{next = next}+  getNext PipelineShaderStageCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineShaderStageCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = Just f+    | otherwise = Nothing++instance (Extendss PipelineShaderStageCreateInfo es, PokeChain es) => ToCStruct (PipelineShaderStageCreateInfo es) where+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineShaderStageCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (stage)+    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (module')+    pName'' <- ContT $ useAsCString (name)+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''+    pSpecializationInfo'' <- case (specializationInfo) of+      Nothing -> pure nullPtr+      Just j -> ContT $ withCStruct (j)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo))) pSpecializationInfo''+    lift $ f+  cStructSize = 48+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr ShaderModule)) (zero)+    pName'' <- ContT $ useAsCString (mempty)+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CChar))) pName''+    lift $ f++instance (Extendss PipelineShaderStageCreateInfo es, PeekChain es) => FromCStruct (PipelineShaderStageCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineShaderStageCreateFlags ((p `plusPtr` 16 :: Ptr PipelineShaderStageCreateFlags))+    stage <- peek @ShaderStageFlagBits ((p `plusPtr` 20 :: Ptr ShaderStageFlagBits))+    module' <- peek @ShaderModule ((p `plusPtr` 24 :: Ptr ShaderModule))+    pName <- packCString =<< peek ((p `plusPtr` 32 :: Ptr (Ptr CChar)))+    pSpecializationInfo <- peek @(Ptr SpecializationInfo) ((p `plusPtr` 40 :: Ptr (Ptr SpecializationInfo)))+    pSpecializationInfo' <- maybePeek (\j -> peekCStruct @SpecializationInfo (j)) pSpecializationInfo+    pure $ PipelineShaderStageCreateInfo+             next flags stage module' pName pSpecializationInfo'++instance es ~ '[] => Zero (PipelineShaderStageCreateInfo es) where+  zero = PipelineShaderStageCreateInfo+           ()+           zero+           zero+           zero+           mempty+           Nothing+++-- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly+-- created compute pipeline+--+-- = Description+--+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are+-- described in more detail in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.+--+-- == Valid Usage+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-00697# If @flags@ contains+--     the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be+--     a valid handle to a compute 'Vulkan.Core10.Handles.Pipeline'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-00698# If @flags@ contains+--     the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineHandle@ is+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/+--     be a valid index into the calling command’s @pCreateInfos@ parameter+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-00699# If @flags@ contains+--     the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/+--     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-00700# If @flags@ contains+--     the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineHandle@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/+--     be -1+--+-- -   #VUID-VkComputePipelineCreateInfo-stage-00701# The @stage@ member of+--     @stage@ /must/ be+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'+--+-- -   #VUID-VkComputePipelineCreateInfo-stage-00702# The shader code for+--     the entry point identified by @stage@ and the rest of the state+--     identified by this structure /must/ adhere to the pipeline linking+--     rules described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>+--     chapter+--+-- -   #VUID-VkComputePipelineCreateInfo-layout-00703# @layout@ /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>+--     with the layout of the compute shader specified in @stage@+--+-- -   #VUID-VkComputePipelineCreateInfo-layout-01687# The number of+--     resources in @layout@ accessible to the compute shader stage /must/+--     be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-03364# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-03365# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-03366# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-03367# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-03368# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-03369# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-03370# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-02874# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'+--+-- -   #VUID-VkComputePipelineCreateInfo-pipelineCreationCacheControl-02875#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>+--     feature is not enabled, @flags@ /must/ not include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'+--     or+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkComputePipelineCreateInfo-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO'+--+-- -   #VUID-VkComputePipelineCreateInfo-pNext-pNext# 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+--     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD'+--     or+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'+--+-- -   #VUID-VkComputePipelineCreateInfo-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkComputePipelineCreateInfo-flags-parameter# @flags@ /must/ be+--     a valid combination of+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'+--     values+--+-- -   #VUID-VkComputePipelineCreateInfo-stage-parameter# @stage@ /must/ be+--     a valid 'PipelineShaderStageCreateInfo' structure+--+-- -   #VUID-VkComputePipelineCreateInfo-layout-parameter# @layout@ /must/+--     be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle+--+-- -   #VUID-VkComputePipelineCreateInfo-commonparent# Both of+--     @basePipelineHandle@, and @layout@ that are valid handles of+--     non-ignored parameters /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Pipeline',+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',+-- 'Vulkan.Core10.Handles.PipelineLayout', 'PipelineShaderStageCreateInfo',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'createComputePipelines'+data ComputePipelineCreateInfo (es :: [Type]) = ComputePipelineCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is a bitmask of+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'+    -- specifying how the pipeline will be generated.+    flags :: PipelineCreateFlags+  , -- | @stage@ is a 'PipelineShaderStageCreateInfo' structure describing the+    -- compute shader.+    stage :: SomeStruct PipelineShaderStageCreateInfo+  , -- | @layout@ is the description of binding locations used by both the+    -- pipeline and descriptor sets used with the pipeline.+    layout :: PipelineLayout+  , -- | @basePipelineHandle@ is a pipeline to derive from+    basePipelineHandle :: Pipeline+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use+    -- as a pipeline to derive from+    basePipelineIndex :: Int32+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ComputePipelineCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (ComputePipelineCreateInfo es)++instance Extensible ComputePipelineCreateInfo where+  extensibleType = STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO+  setNext x next = x{next = next}+  getNext ComputePipelineCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ComputePipelineCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f+    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f+    | otherwise = Nothing++instance (Extendss ComputePipelineCreateInfo es, PokeChain es) => ToCStruct (ComputePipelineCreateInfo es) where+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ComputePipelineCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)+    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) (stage) . ($ ())+    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (layout)+    lift $ poke ((p `plusPtr` 80 :: Ptr Pipeline)) (basePipelineHandle)+    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (basePipelineIndex)+    lift $ f+  cStructSize = 96+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    ContT $ pokeSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo _)))) ((SomeStruct zero)) . ($ ())+    lift $ poke ((p `plusPtr` 72 :: Ptr PipelineLayout)) (zero)+    lift $ poke ((p `plusPtr` 88 :: Ptr Int32)) (zero)+    lift $ f++instance (Extendss ComputePipelineCreateInfo es, PeekChain es) => FromCStruct (ComputePipelineCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))+    stage <- peekSomeCStruct (forgetExtensions ((p `plusPtr` 24 :: Ptr (PipelineShaderStageCreateInfo a))))+    layout <- peek @PipelineLayout ((p `plusPtr` 72 :: Ptr PipelineLayout))+    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 80 :: Ptr Pipeline))+    basePipelineIndex <- peek @Int32 ((p `plusPtr` 88 :: Ptr Int32))+    pure $ ComputePipelineCreateInfo+             next flags stage layout basePipelineHandle basePipelineIndex++instance es ~ '[] => Zero (ComputePipelineCreateInfo es) where+  zero = ComputePipelineCreateInfo+           ()+           zero+           (SomeStruct zero)+           zero+           zero+           zero+++-- | VkVertexInputBindingDescription - Structure specifying vertex input+-- binding description+--+-- == Valid Usage+--+-- -   #VUID-VkVertexInputBindingDescription-binding-00618# @binding@+--     /must/ be less than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@+--+-- -   #VUID-VkVertexInputBindingDescription-stride-00619# @stride@ /must/+--     be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@+--+-- -   #VUID-VkVertexInputBindingDescription-stride-04456# If the+--     @VK_KHR_portability_subset@ extension is enabled, @stride@ /must/ be+--     a multiple of, and at least as large as,+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetPropertiesKHR'::@minVertexInputBindingStrideAlignment@.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkVertexInputBindingDescription-inputRate-parameter#+--     @inputRate@ /must/ be a valid+--     'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate' value+--+-- = See Also+--+-- 'PipelineVertexInputStateCreateInfo',+-- 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'+data VertexInputBindingDescription = VertexInputBindingDescription+  { -- | @binding@ is the binding number that this structure describes.+    binding :: Word32+  , -- | @stride@ is the distance in bytes between two consecutive elements+    -- within the buffer.+    stride :: Word32+  , -- | @inputRate@ is a 'Vulkan.Core10.Enums.VertexInputRate.VertexInputRate'+    -- value specifying whether vertex attribute addressing is a function of+    -- the vertex index or of the instance index.+    inputRate :: VertexInputRate+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (VertexInputBindingDescription)+#endif+deriving instance Show VertexInputBindingDescription++instance ToCStruct VertexInputBindingDescription where+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p VertexInputBindingDescription{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (binding)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (stride)+    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (inputRate)+    f+  cStructSize = 12+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 8 :: Ptr VertexInputRate)) (zero)+    f++instance FromCStruct VertexInputBindingDescription where+  peekCStruct p = do+    binding <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))+    stride <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    inputRate <- peek @VertexInputRate ((p `plusPtr` 8 :: Ptr VertexInputRate))+    pure $ VertexInputBindingDescription+             binding stride inputRate++instance Storable VertexInputBindingDescription where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero VertexInputBindingDescription where+  zero = VertexInputBindingDescription+           zero+           zero+           zero+++-- | VkVertexInputAttributeDescription - Structure specifying vertex input+-- attribute description+--+-- == Valid Usage+--+-- -   #VUID-VkVertexInputAttributeDescription-location-00620# @location@+--     /must/ be less than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@+--+-- -   #VUID-VkVertexInputAttributeDescription-binding-00621# @binding@+--     /must/ be less than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@+--+-- -   #VUID-VkVertexInputAttributeDescription-offset-00622# @offset@+--     /must/ be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributeOffset@+--+-- -   #VUID-VkVertexInputAttributeDescription-format-00623# @format@+--     /must/ be allowed as a vertex buffer format, as specified by the+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_VERTEX_BUFFER_BIT'+--     flag in+--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@+--     returned by+--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFormatProperties'+--+-- -   #VUID-VkVertexInputAttributeDescription-vertexAttributeAccessBeyondStride-04457#+--     If the @VK_KHR_portability_subset@ extension is enabled, and+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@vertexAttributeAccessBeyondStride@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', the sum of @offset@ plus+--     the size of the vertex attribute data described by @format@ /must/+--     not be greater than @stride@ in the 'VertexInputBindingDescription'+--     referenced in @binding@.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkVertexInputAttributeDescription-format-parameter# @format@+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.Format.Format',+-- 'PipelineVertexInputStateCreateInfo'+data VertexInputAttributeDescription = VertexInputAttributeDescription+  { -- | @location@ is the shader binding location number for this attribute.+    location :: Word32+  , -- | @binding@ is the binding number which this attribute takes its data+    -- from.+    binding :: Word32+  , -- | @format@ is the size and type of the vertex attribute data.+    format :: Format+  , -- | @offset@ is a byte offset of this attribute relative to the start of an+    -- element in the vertex input binding.+    offset :: Word32+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (VertexInputAttributeDescription)+#endif+deriving instance Show VertexInputAttributeDescription++instance ToCStruct VertexInputAttributeDescription where+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p VertexInputAttributeDescription{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (location)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (binding)+    poke ((p `plusPtr` 8 :: Ptr Format)) (format)+    poke ((p `plusPtr` 12 :: Ptr Word32)) (offset)+    f+  cStructSize = 16+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 8 :: Ptr Format)) (zero)+    poke ((p `plusPtr` 12 :: Ptr Word32)) (zero)+    f++instance FromCStruct VertexInputAttributeDescription where+  peekCStruct p = do+    location <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))+    binding <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    format <- peek @Format ((p `plusPtr` 8 :: Ptr Format))+    offset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))+    pure $ VertexInputAttributeDescription+             location binding format offset++instance Storable VertexInputAttributeDescription where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero VertexInputAttributeDescription where+  zero = VertexInputAttributeDescription+           zero+           zero+           zero+           zero+++-- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters+-- of a newly created pipeline vertex input state+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613#+--     @vertexBindingDescriptionCount@ /must/ be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614#+--     @vertexAttributeDescriptionCount@ /must/ be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputAttributes@+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-binding-00615# For every+--     @binding@ specified by each element of+--     @pVertexAttributeDescriptions@, a 'VertexInputBindingDescription'+--     /must/ exist in @pVertexBindingDescriptions@ with the same value of+--     @binding@+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616#+--     All elements of @pVertexBindingDescriptions@ /must/ describe+--     distinct binding numbers+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617#+--     All elements of @pVertexAttributeDescriptions@ /must/ describe+--     distinct attribute locations+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pNext-pNext# @pNext@+--     /must/ be @NULL@ or a pointer to a valid instance of+--     'Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.PipelineVertexInputDivisorStateCreateInfoEXT'+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-flags-zerobitmask#+--     @flags@ /must/ be @0@+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-parameter#+--     If @vertexBindingDescriptionCount@ is not @0@,+--     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array+--     of @vertexBindingDescriptionCount@ valid+--     'VertexInputBindingDescription' structures+--+-- -   #VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-parameter#+--     If @vertexAttributeDescriptionCount@ is not @0@,+--     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array+--     of @vertexAttributeDescriptionCount@ valid+--     'VertexInputAttributeDescription' structures+--+-- = See Also+--+-- 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',+-- 'Vulkan.Core10.Enums.PipelineVertexInputStateCreateFlags.PipelineVertexInputStateCreateFlags',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'VertexInputAttributeDescription', 'VertexInputBindingDescription'+data PipelineVertexInputStateCreateInfo (es :: [Type]) = PipelineVertexInputStateCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is reserved for future use.+    flags :: PipelineVertexInputStateCreateFlags+  , -- | @pVertexBindingDescriptions@ is a pointer to an array of+    -- 'VertexInputBindingDescription' structures.+    vertexBindingDescriptions :: Vector VertexInputBindingDescription+  , -- | @pVertexAttributeDescriptions@ is a pointer to an array of+    -- 'VertexInputAttributeDescription' structures.+    vertexAttributeDescriptions :: Vector VertexInputAttributeDescription+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineVertexInputStateCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (PipelineVertexInputStateCreateInfo es)++instance Extensible PipelineVertexInputStateCreateInfo where+  extensibleType = STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO+  setNext x next = x{next = next}+  getNext PipelineVertexInputStateCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineVertexInputStateCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineVertexInputDivisorStateCreateInfoEXT = Just f+    | otherwise = Nothing++instance (Extendss PipelineVertexInputStateCreateInfo es, PokeChain es) => ToCStruct (PipelineVertexInputStateCreateInfo es) where+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineVertexInputStateCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexBindingDescriptions)) :: Word32))+    pPVertexBindingDescriptions' <- ContT $ allocaBytesAligned @VertexInputBindingDescription ((Data.Vector.length (vertexBindingDescriptions)) * 12) 4+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e) . ($ ())) (vertexBindingDescriptions)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (vertexAttributeDescriptions)) :: Word32))+    pPVertexAttributeDescriptions' <- ContT $ allocaBytesAligned @VertexInputAttributeDescription ((Data.Vector.length (vertexAttributeDescriptions)) * 16) 4+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e) . ($ ())) (vertexAttributeDescriptions)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')+    lift $ f+  cStructSize = 48+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    pPVertexBindingDescriptions' <- ContT $ allocaBytesAligned @VertexInputBindingDescription ((Data.Vector.length (mempty)) * 12) 4+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexBindingDescriptions' `plusPtr` (12 * (i)) :: Ptr VertexInputBindingDescription) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription))) (pPVertexBindingDescriptions')+    pPVertexAttributeDescriptions' <- ContT $ allocaBytesAligned @VertexInputAttributeDescription ((Data.Vector.length (mempty)) * 16) 4+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPVertexAttributeDescriptions' `plusPtr` (16 * (i)) :: Ptr VertexInputAttributeDescription) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription))) (pPVertexAttributeDescriptions')+    lift $ f++instance (Extendss PipelineVertexInputStateCreateInfo es, PeekChain es) => FromCStruct (PipelineVertexInputStateCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineVertexInputStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineVertexInputStateCreateFlags))+    vertexBindingDescriptionCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    pVertexBindingDescriptions <- peek @(Ptr VertexInputBindingDescription) ((p `plusPtr` 24 :: Ptr (Ptr VertexInputBindingDescription)))+    pVertexBindingDescriptions' <- generateM (fromIntegral vertexBindingDescriptionCount) (\i -> peekCStruct @VertexInputBindingDescription ((pVertexBindingDescriptions `advancePtrBytes` (12 * (i)) :: Ptr VertexInputBindingDescription)))+    vertexAttributeDescriptionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))+    pVertexAttributeDescriptions <- peek @(Ptr VertexInputAttributeDescription) ((p `plusPtr` 40 :: Ptr (Ptr VertexInputAttributeDescription)))+    pVertexAttributeDescriptions' <- generateM (fromIntegral vertexAttributeDescriptionCount) (\i -> peekCStruct @VertexInputAttributeDescription ((pVertexAttributeDescriptions `advancePtrBytes` (16 * (i)) :: Ptr VertexInputAttributeDescription)))+    pure $ PipelineVertexInputStateCreateInfo+             next flags pVertexBindingDescriptions' pVertexAttributeDescriptions'++instance es ~ '[] => Zero (PipelineVertexInputStateCreateInfo es) where+  zero = PipelineVertexInputStateCreateInfo+           ()+           zero+           mempty+           mempty+++-- | VkPipelineInputAssemblyStateCreateInfo - Structure specifying parameters+-- of a newly created pipeline input assembly state+--+-- = Description+--+-- Restarting the assembly of primitives discards the most recent index+-- values if those elements formed an incomplete primitive, and restarts+-- the primitive assembly using the subsequent indices, but only assembling+-- the immediately following element through the end of the originally+-- specified elements. The primitive restart index value comparison is+-- performed before adding the @vertexOffset@ value to the index value.+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428# If+--     @topology@ is+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_POINT_LIST',+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST',+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST',+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'+--     or+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',+--     @primitiveRestartEnable@ /must/ be+--     'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders>+--     feature is not enabled, @topology@ /must/ not be any of+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY',+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY',+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY'+--     or+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY'+--+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>+--     feature is not enabled, @topology@ /must/ not be+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'+--+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-triangleFans-04452# If+--     the @VK_KHR_portability_subset@ extension is enabled, and+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@triangleFans@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @topology@ /must/ not be+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_TRIANGLE_FAN'.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-pNext-pNext# @pNext@+--     /must/ be @NULL@+--+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-flags-zerobitmask#+--     @flags@ /must/ be @0@+--+-- -   #VUID-VkPipelineInputAssemblyStateCreateInfo-topology-parameter#+--     @topology@ /must/ be a valid+--     'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' value+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Core10.Enums.PipelineInputAssemblyStateCreateFlags.PipelineInputAssemblyStateCreateFlags',+-- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineInputAssemblyStateCreateInfo = PipelineInputAssemblyStateCreateInfo+  { -- | @flags@ is reserved for future use.+    flags :: PipelineInputAssemblyStateCreateFlags+  , -- | @topology@ is a+    -- 'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' defining the+    -- primitive topology, as described below.+    topology :: PrimitiveTopology+  , -- | @primitiveRestartEnable@ controls whether a special vertex index value+    -- is treated as restarting the assembly of primitives. This enable only+    -- applies to indexed draws+    -- ('Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexed' and+    -- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'), and the+    -- special index value is either 0xFFFFFFFF when the @indexType@ parameter+    -- of 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer' is equal to+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', 0xFF when @indexType@+    -- is equal to 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT', or+    -- 0xFFFF when @indexType@ is equal to+    -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16'. Primitive restart is+    -- not allowed for “list” topologies.+    primitiveRestartEnable :: Bool+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineInputAssemblyStateCreateInfo)+#endif+deriving instance Show PipelineInputAssemblyStateCreateInfo++instance ToCStruct PipelineInputAssemblyStateCreateInfo where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineInputAssemblyStateCreateInfo{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags)) (flags)+    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (topology)+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (primitiveRestartEnable))+    f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 20 :: Ptr PrimitiveTopology)) (zero)+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))+    f++instance FromCStruct PipelineInputAssemblyStateCreateInfo where+  peekCStruct p = do+    flags <- peek @PipelineInputAssemblyStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineInputAssemblyStateCreateFlags))+    topology <- peek @PrimitiveTopology ((p `plusPtr` 20 :: Ptr PrimitiveTopology))+    primitiveRestartEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))+    pure $ PipelineInputAssemblyStateCreateInfo+             flags topology (bool32ToBool primitiveRestartEnable)++instance Storable PipelineInputAssemblyStateCreateInfo where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PipelineInputAssemblyStateCreateInfo where+  zero = PipelineInputAssemblyStateCreateInfo+           zero+           zero+           zero+++-- | VkPipelineTessellationStateCreateInfo - Structure specifying parameters+-- of a newly created pipeline tessellation state+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214#+--     @patchControlPoints@ /must/ be greater than zero and less than or+--     equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTessellationPatchSize@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineTessellationStateCreateInfo-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineTessellationStateCreateInfo-pNext-pNext# @pNext@+--     /must/ be @NULL@ or a pointer to a valid instance of+--     'Vulkan.Core11.Promoted_From_VK_KHR_maintenance2.PipelineTessellationDomainOriginStateCreateInfo'+--+-- -   #VUID-VkPipelineTessellationStateCreateInfo-sType-unique# The+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkPipelineTessellationStateCreateInfo-flags-zerobitmask#+--     @flags@ /must/ be @0@+--+-- = See Also+--+-- 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsShaderGroupCreateInfoNV',+-- 'Vulkan.Core10.Enums.PipelineTessellationStateCreateFlags.PipelineTessellationStateCreateFlags',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineTessellationStateCreateInfo (es :: [Type]) = PipelineTessellationStateCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is reserved for future use.+    flags :: PipelineTessellationStateCreateFlags+  , -- | @patchControlPoints@ number of control points per patch.+    patchControlPoints :: Word32+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineTessellationStateCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (PipelineTessellationStateCreateInfo es)++instance Extensible PipelineTessellationStateCreateInfo where+  extensibleType = STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO+  setNext x next = x{next = next}+  getNext PipelineTessellationStateCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineTessellationStateCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineTessellationDomainOriginStateCreateInfo = Just f+    | otherwise = Nothing++instance (Extendss PipelineTessellationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineTessellationStateCreateInfo es) where+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineTessellationStateCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (patchControlPoints)+    lift $ f+  cStructSize = 24+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)+    lift $ f++instance (Extendss PipelineTessellationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineTessellationStateCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineTessellationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineTessellationStateCreateFlags))+    patchControlPoints <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    pure $ PipelineTessellationStateCreateInfo+             next flags patchControlPoints++instance es ~ '[] => Zero (PipelineTessellationStateCreateInfo es) where+  zero = PipelineTessellationStateCreateInfo+           ()+           zero+           zero+++-- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a+-- newly created pipeline viewport state+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+--     feature is not enabled, @viewportCount@ /must/ not be greater than+--     @1@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports>+--     feature is not enabled, @scissorCount@ /must/ not be greater than+--     @1@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218#+--     @viewportCount@ /must/ be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219#+--     @scissorCount@ /must/ be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-x-02821# The @x@ and @y@+--     members of @offset@ member of any element of @pScissors@ /must/ be+--     greater than or equal to @0@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-offset-02822# Evaluation of+--     (@offset.x@ + @extent.width@) /must/ not cause a signed integer+--     addition overflow for any element of @pScissors@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-offset-02823# Evaluation of+--     (@offset.y@ + @extent.height@) /must/ not cause a signed integer+--     addition overflow for any element of @pScissors@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-04134# If the+--     graphics pipeline is being created without+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     set then @scissorCount@ and @viewportCount@ /must/ be identical+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-viewportCount-04135# If the+--     graphics pipeline is being created with+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     set then @viewportCount@ /must/ be @0@, otherwise it /must/ be+--     greater than @0@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-scissorCount-04136# If the+--     graphics pipeline is being created with+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     set then @scissorCount@ /must/ be @0@, otherwise it /must/ be+--     greater than @0@+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-viewportWScalingEnable-01726#+--     If the @viewportWScalingEnable@ member of a+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'+--     structure included in the @pNext@ chain is+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @viewportCount@ member of+--     the+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'+--     structure /must/ be greater than or equal to+--     'PipelineViewportStateCreateInfo'::@viewportCount@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-sType-sType# @sType@ /must/+--     be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-pNext-pNext# 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+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportCoarseSampleOrderStateCreateInfoNV',+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV',+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV',+--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV',+--     or+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkPipelineViewportStateCreateInfo-flags-zerobitmask# @flags@+--     /must/ be @0@+--+-- = See Also+--+-- 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Core10.Enums.PipelineViewportStateCreateFlags.PipelineViewportStateCreateFlags',+-- 'Vulkan.Core10.FundamentalTypes.Rect2D',+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'Viewport'+data PipelineViewportStateCreateInfo (es :: [Type]) = PipelineViewportStateCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is reserved for future use.+    flags :: PipelineViewportStateCreateFlags+  , -- | @viewportCount@ is the number of viewports used by the pipeline.+    viewportCount :: Word32+  , -- | @pViewports@ is a pointer to an array of 'Viewport' structures, defining+    -- the viewport transforms. If the viewport state is dynamic, this member+    -- is ignored.+    viewports :: Vector Viewport+  , -- | @scissorCount@ is the number of+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-scissor scissors>+    -- and /must/ match the number of viewports.+    scissorCount :: Word32+  , -- | @pScissors@ is a pointer to an array of+    -- 'Vulkan.Core10.FundamentalTypes.Rect2D' structures defining the+    -- rectangular bounds of the scissor for the corresponding viewport. If the+    -- scissor state is dynamic, this member is ignored.+    scissors :: Vector Rect2D+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineViewportStateCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (PipelineViewportStateCreateInfo es)++instance Extensible PipelineViewportStateCreateInfo where+  extensibleType = STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO+  setNext x next = x{next = next}+  getNext PipelineViewportStateCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineViewportStateCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineViewportCoarseSampleOrderStateCreateInfoNV = Just f+    | Just Refl <- eqT @e @PipelineViewportShadingRateImageStateCreateInfoNV = Just f+    | Just Refl <- eqT @e @PipelineViewportExclusiveScissorStateCreateInfoNV = Just f+    | Just Refl <- eqT @e @PipelineViewportSwizzleStateCreateInfoNV = Just f+    | Just Refl <- eqT @e @PipelineViewportWScalingStateCreateInfoNV = Just f+    | otherwise = Nothing++instance (Extendss PipelineViewportStateCreateInfo es, PokeChain es) => ToCStruct (PipelineViewportStateCreateInfo es) where+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineViewportStateCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags)) (flags)+    let pViewportsLength = Data.Vector.length $ (viewports)+    viewportCount'' <- lift $ if (viewportCount) == 0+      then pure $ fromIntegral pViewportsLength+      else do+        unless (fromIntegral pViewportsLength == (viewportCount) || pViewportsLength == 0) $+          throwIO $ IOError Nothing InvalidArgument "" "pViewports must be empty or have 'viewportCount' elements" Nothing Nothing+        pure (viewportCount)+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (viewportCount'')+    pViewports'' <- if Data.Vector.null (viewports)+      then pure nullPtr+      else do+        pPViewports <- ContT $ allocaBytesAligned @Viewport (((Data.Vector.length (viewports))) * 24) 4+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPViewports `plusPtr` (24 * (i)) :: Ptr Viewport) (e) . ($ ())) ((viewports))+        pure $ pPViewports+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Viewport))) pViewports''+    let pScissorsLength = Data.Vector.length $ (scissors)+    scissorCount'' <- lift $ if (scissorCount) == 0+      then pure $ fromIntegral pScissorsLength+      else do+        unless (fromIntegral pScissorsLength == (scissorCount) || pScissorsLength == 0) $+          throwIO $ IOError Nothing InvalidArgument "" "pScissors must be empty or have 'scissorCount' elements" Nothing Nothing+        pure (scissorCount)+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (scissorCount'')+    pScissors'' <- if Data.Vector.null (scissors)+      then pure nullPtr+      else do+        pPScissors <- ContT $ allocaBytesAligned @Rect2D (((Data.Vector.length (scissors))) * 16) 4+        Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPScissors `plusPtr` (16 * (i)) :: Ptr Rect2D) (e) . ($ ())) ((scissors))+        pure $ pPScissors+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Rect2D))) pScissors''+    lift $ f+  cStructSize = 48+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ f++instance (Extendss PipelineViewportStateCreateInfo es, PeekChain es) => FromCStruct (PipelineViewportStateCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineViewportStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineViewportStateCreateFlags))+    viewportCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    pViewports <- peek @(Ptr Viewport) ((p `plusPtr` 24 :: Ptr (Ptr Viewport)))+    let pViewportsLength = if pViewports == nullPtr then 0 else (fromIntegral viewportCount)+    pViewports' <- generateM pViewportsLength (\i -> peekCStruct @Viewport ((pViewports `advancePtrBytes` (24 * (i)) :: Ptr Viewport)))+    scissorCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))+    pScissors <- peek @(Ptr Rect2D) ((p `plusPtr` 40 :: Ptr (Ptr Rect2D)))+    let pScissorsLength = if pScissors == nullPtr then 0 else (fromIntegral scissorCount)+    pScissors' <- generateM pScissorsLength (\i -> peekCStruct @Rect2D ((pScissors `advancePtrBytes` (16 * (i)) :: Ptr Rect2D)))+    pure $ PipelineViewportStateCreateInfo+             next flags viewportCount pViewports' scissorCount pScissors'++instance es ~ '[] => Zero (PipelineViewportStateCreateInfo es) where+  zero = PipelineViewportStateCreateInfo+           ()+           zero+           zero+           mempty+           zero+           mempty+++-- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters+-- of a newly created pipeline rasterization state+--+-- = Description+--+-- The application /can/ also add a+-- 'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD'+-- structure to the @pNext@ chain of a+-- 'PipelineRasterizationStateCreateInfo' structure. This structure enables+-- selecting the rasterization order to use when rendering with the+-- corresponding graphics pipeline as described in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-order Rasterization Order>.+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthClamp depth clamping>+--     feature is not enabled, @depthClampEnable@ /must/ be+--     'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01507# If+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fillModeNonSolid non-solid fill modes>+--     feature is not enabled, @polygonMode@ /must/ be+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL' or+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-01414# If+--     the @VK_NV_fill_rectangle@ extension is not enabled, @polygonMode@+--     /must/ not be+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_FILL_RECTANGLE_NV'+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-pointPolygons-04458# If+--     the @VK_KHR_portability_subset@ extension is enabled, and+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@pointPolygons@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', and+--     @rasterizerDiscardEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE',+--     @polygonMode@ /must/ not be+--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_POINT'.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-pNext-pNext# 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+--     'Vulkan.Extensions.VK_EXT_conservative_rasterization.PipelineRasterizationConservativeStateCreateInfoEXT',+--     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT',+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT',+--     'Vulkan.Extensions.VK_AMD_rasterization_order.PipelineRasterizationStateRasterizationOrderAMD',+--     or+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-sType-unique# The+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-flags-zerobitmask#+--     @flags@ /must/ be @0@+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-parameter#+--     @polygonMode@ /must/ be a valid+--     'Vulkan.Core10.Enums.PolygonMode.PolygonMode' value+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-cullMode-parameter#+--     @cullMode@ /must/ be a valid combination of+--     'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits' values+--+-- -   #VUID-VkPipelineRasterizationStateCreateInfo-frontFace-parameter#+--     @frontFace@ /must/ be a valid+--     'Vulkan.Core10.Enums.FrontFace.FrontFace' value+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlags',+-- 'Vulkan.Core10.Enums.FrontFace.FrontFace', 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Core10.Enums.PipelineRasterizationStateCreateFlags.PipelineRasterizationStateCreateFlags',+-- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineRasterizationStateCreateInfo (es :: [Type]) = PipelineRasterizationStateCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is reserved for future use.+    flags :: PipelineRasterizationStateCreateFlags+  , -- | @depthClampEnable@ controls whether to clamp the fragment’s depth values+    -- as described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth Depth Test>.+    -- If the pipeline is not created with+    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'+    -- present then enabling depth clamp will also disable clipping primitives+    -- to the z planes of the frustrum as described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>.+    -- Otherwise depth clipping is controlled by the state set in+    -- 'Vulkan.Extensions.VK_EXT_depth_clip_enable.PipelineRasterizationDepthClipStateCreateInfoEXT'.+    depthClampEnable :: Bool+  , -- | @rasterizerDiscardEnable@ controls whether primitives are discarded+    -- immediately before the rasterization stage.+    rasterizerDiscardEnable :: Bool+  , -- | @polygonMode@ is the triangle rendering mode. See+    -- 'Vulkan.Core10.Enums.PolygonMode.PolygonMode'.+    polygonMode :: PolygonMode+  , -- | @cullMode@ is the triangle facing direction used for primitive culling.+    -- See 'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits'.+    cullMode :: CullModeFlags+  , -- | @frontFace@ is a 'Vulkan.Core10.Enums.FrontFace.FrontFace' value+    -- specifying the front-facing triangle orientation to be used for culling.+    frontFace :: FrontFace+  , -- | @depthBiasEnable@ controls whether to bias fragment depth values.+    depthBiasEnable :: Bool+  , -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant+    -- depth value added to each fragment.+    depthBiasConstantFactor :: Float+  , -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.+    depthBiasClamp :: Float+  , -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope+    -- in depth bias calculations.+    depthBiasSlopeFactor :: Float+  , -- | @lineWidth@ is the width of rasterized line segments.+    lineWidth :: Float+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineRasterizationStateCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (PipelineRasterizationStateCreateInfo es)++instance Extensible PipelineRasterizationStateCreateInfo where+  extensibleType = STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO+  setNext x next = x{next = next}+  getNext PipelineRasterizationStateCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineRasterizationStateCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineRasterizationLineStateCreateInfoEXT = Just f+    | Just Refl <- eqT @e @PipelineRasterizationDepthClipStateCreateInfoEXT = Just f+    | Just Refl <- eqT @e @PipelineRasterizationStateStreamCreateInfoEXT = Just f+    | Just Refl <- eqT @e @PipelineRasterizationConservativeStateCreateInfoEXT = Just f+    | Just Refl <- eqT @e @PipelineRasterizationStateRasterizationOrderAMD = Just f+    | otherwise = Nothing++instance (Extendss PipelineRasterizationStateCreateInfo es, PokeChain es) => ToCStruct (PipelineRasterizationStateCreateInfo es) where+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineRasterizationStateCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthClampEnable))+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rasterizerDiscardEnable))+    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (polygonMode)+    lift $ poke ((p `plusPtr` 32 :: Ptr CullModeFlags)) (cullMode)+    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (frontFace)+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (depthBiasEnable))+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (depthBiasConstantFactor))+    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (depthBiasClamp))+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (depthBiasSlopeFactor))+    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (lineWidth))+    lift $ f+  cStructSize = 64+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 28 :: Ptr PolygonMode)) (zero)+    lift $ poke ((p `plusPtr` 36 :: Ptr FrontFace)) (zero)+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 44 :: Ptr CFloat)) (CFloat (zero))+    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))+    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))+    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))+    lift $ f++instance (Extendss PipelineRasterizationStateCreateInfo es, PeekChain es) => FromCStruct (PipelineRasterizationStateCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineRasterizationStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineRasterizationStateCreateFlags))+    depthClampEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))+    rasterizerDiscardEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))+    polygonMode <- peek @PolygonMode ((p `plusPtr` 28 :: Ptr PolygonMode))+    cullMode <- peek @CullModeFlags ((p `plusPtr` 32 :: Ptr CullModeFlags))+    frontFace <- peek @FrontFace ((p `plusPtr` 36 :: Ptr FrontFace))+    depthBiasEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))+    depthBiasConstantFactor <- peek @CFloat ((p `plusPtr` 44 :: Ptr CFloat))+    depthBiasClamp <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))+    depthBiasSlopeFactor <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))+    lineWidth <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))+    pure $ PipelineRasterizationStateCreateInfo+             next flags (bool32ToBool depthClampEnable) (bool32ToBool rasterizerDiscardEnable) polygonMode cullMode frontFace (bool32ToBool depthBiasEnable) ((\(CFloat a) -> a) depthBiasConstantFactor) ((\(CFloat a) -> a) depthBiasClamp) ((\(CFloat a) -> a) depthBiasSlopeFactor) ((\(CFloat a) -> a) lineWidth)++instance es ~ '[] => Zero (PipelineRasterizationStateCreateInfo es) where+  zero = PipelineRasterizationStateCreateInfo+           ()+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters+-- of a newly created pipeline multisample state+--+-- = Description+--+-- Each bit in the sample mask is associated with a unique+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask sample index>+-- as defined for the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-multisampling-coverage-mask coverage mask>.+-- Each bit b for mask word w in the sample mask corresponds to sample+-- index i, where i = 32 × w + b. @pSampleMask@ has a length equal to ⌈+-- @rasterizationSamples@ \/ 32 ⌉ words.+--+-- If @pSampleMask@ is @NULL@, it is treated as if the mask has all bits+-- set to @1@.+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sampleRateShading sample rate shading>+--     feature is not enabled, @sampleShadingEnable@ /must/ be+--     'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-alphaToOne alpha to one>+--     feature is not enabled, @alphaToOneEnable@ /must/ be+--     'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786#+--     @minSampleShading@ /must/ be in the range [0,1]+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415#+--     If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and+--     if the subpass has any color attachments and @rasterizationSamples@+--     is greater than the number of color samples, then+--     @sampleShadingEnable@ /must/ be+--     'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-pNext-pNext# 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+--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.PipelineCoverageModulationStateCreateInfoNV',+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV',+--     'Vulkan.Extensions.VK_NV_fragment_coverage_to_color.PipelineCoverageToColorStateCreateInfoNV',+--     or+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-flags-zerobitmask#+--     @flags@ /must/ be @0@+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-parameter#+--     @rasterizationSamples@ /must/ be a valid+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value+--+-- -   #VUID-VkPipelineMultisampleStateCreateInfo-pSampleMask-parameter# If+--     @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid pointer+--     to an array of+--     \(\lceil{\mathit{rasterizationSamples} \over 32}\rceil\)+--     'Vulkan.Core10.FundamentalTypes.SampleMask' values+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Core10.Enums.PipelineMultisampleStateCreateFlags.PipelineMultisampleStateCreateFlags',+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',+-- 'Vulkan.Core10.FundamentalTypes.SampleMask',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineMultisampleStateCreateInfo (es :: [Type]) = PipelineMultisampleStateCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is reserved for future use.+    flags :: PipelineMultisampleStateCreateFlags+  , -- | @rasterizationSamples@ is a+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' specifying+    -- the number of samples used in rasterization.+    rasterizationSamples :: SampleCountFlagBits+  , -- | @sampleShadingEnable@ /can/ be used to enable+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-sampleshading Sample Shading>.+    sampleShadingEnable :: Bool+  , -- | @minSampleShading@ specifies a minimum fraction of sample shading if+    -- @sampleShadingEnable@ is set to 'Vulkan.Core10.FundamentalTypes.TRUE'.+    minSampleShading :: Float+  , -- | @pSampleMask@ is an array of 'Vulkan.Core10.FundamentalTypes.SampleMask'+    -- values used in the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-samplemask sample mask test>.+    sampleMask :: Vector SampleMask+  , -- | @alphaToCoverageEnable@ controls whether a temporary coverage value is+    -- generated based on the alpha component of the fragment’s first color+    -- output as specified in the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-covg Multisample Coverage>+    -- section.+    alphaToCoverageEnable :: Bool+  , -- | @alphaToOneEnable@ controls whether the alpha component of the+    -- fragment’s first color output is replaced with one as described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-covg Multisample Coverage>.+    alphaToOneEnable :: Bool+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineMultisampleStateCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (PipelineMultisampleStateCreateInfo es)++instance Extensible PipelineMultisampleStateCreateInfo where+  extensibleType = STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO+  setNext x next = x{next = next}+  getNext PipelineMultisampleStateCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineMultisampleStateCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineCoverageReductionStateCreateInfoNV = Just f+    | Just Refl <- eqT @e @PipelineCoverageModulationStateCreateInfoNV = Just f+    | Just Refl <- eqT @e @PipelineSampleLocationsStateCreateInfoEXT = Just f+    | Just Refl <- eqT @e @PipelineCoverageToColorStateCreateInfoNV = Just f+    | otherwise = Nothing++instance (Extendss PipelineMultisampleStateCreateInfo es, PokeChain es) => ToCStruct (PipelineMultisampleStateCreateInfo es) where+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineMultisampleStateCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (rasterizationSamples)+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (sampleShadingEnable))+    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (minSampleShading))+    pSampleMask'' <- case Data.Vector.length (sampleMask) of+      0      -> pure nullPtr+      vecLen -> do+        let requiredLen = case (rasterizationSamples) of+              SampleCountFlagBits n -> (n + 31) `quot` 32+        lift $ unless (requiredLen == fromIntegral vecLen) $+          throwIO $ IOError Nothing InvalidArgument "" "sampleMask must be either empty or contain enough bits to cover all the sample specified by 'rasterizationSamples'" Nothing Nothing+        do+          pPSampleMask' <- ContT $ allocaBytesAligned @SampleMask ((Data.Vector.length ((sampleMask))) * 4) 4+          lift $ Data.Vector.imapM_ (\i e -> poke (pPSampleMask' `plusPtr` (4 * (i)) :: Ptr SampleMask) (e)) ((sampleMask))+          pure $ pPSampleMask'+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SampleMask))) pSampleMask''+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (alphaToCoverageEnable))+    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (alphaToOneEnable))+    lift $ f+  cStructSize = 48+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 20 :: Ptr SampleCountFlagBits)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 28 :: Ptr CFloat)) (CFloat (zero))+    lift $ poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ f++instance (Extendss PipelineMultisampleStateCreateInfo es, PeekChain es) => FromCStruct (PipelineMultisampleStateCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineMultisampleStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineMultisampleStateCreateFlags))+    rasterizationSamples <- peek @SampleCountFlagBits ((p `plusPtr` 20 :: Ptr SampleCountFlagBits))+    sampleShadingEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))+    minSampleShading <- peek @CFloat ((p `plusPtr` 28 :: Ptr CFloat))+    pSampleMask <- peek @(Ptr SampleMask) ((p `plusPtr` 32 :: Ptr (Ptr SampleMask)))+    pSampleMask' <- if pSampleMask == nullPtr+      then pure mempty+      else generateM (case rasterizationSamples of+        SampleCountFlagBits n -> (fromIntegral n + 31) `quot` 32) (\i -> peek @SampleMask (((pSampleMask) `advancePtrBytes` (4 * (i)) :: Ptr SampleMask)))+    alphaToCoverageEnable <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))+    alphaToOneEnable <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))+    pure $ PipelineMultisampleStateCreateInfo+             next flags rasterizationSamples (bool32ToBool sampleShadingEnable) ((\(CFloat a) -> a) minSampleShading) pSampleMask' (bool32ToBool alphaToCoverageEnable) (bool32ToBool alphaToOneEnable)++instance es ~ '[] => Zero (PipelineMultisampleStateCreateInfo es) where+  zero = PipelineMultisampleStateCreateInfo+           ()+           zero+           zero+           zero+           zero+           mempty+           zero+           zero+++-- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline+-- color blend attachment state+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>+--     feature is not enabled, @srcColorBlendFactor@ /must/ not be+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>+--     feature is not enabled, @dstColorBlendFactor@ /must/ not be+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>+--     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dualSrcBlend dual source blending>+--     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_COLOR',+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_COLOR',+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_SRC1_ALPHA', or+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA'+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01406# If+--     either of @colorBlendOp@ or @alphaBlendOp@ is an+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,+--     then @colorBlendOp@ /must/ equal @alphaBlendOp@+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01407#+--     If+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE' and @colorBlendOp@ is an+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,+--     then @colorBlendOp@ /must/ be the same for all attachments+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendIndependentBlend-01408#+--     If+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE' and @alphaBlendOp@ is an+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,+--     then @alphaBlendOp@ /must/ be the same for all attachments+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-advancedBlendAllOperations-01409#+--     If+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendAllOperations@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', then @colorBlendOp@+--     /must/ not be 'Vulkan.Core10.Enums.BlendOp.BLEND_OP_ZERO_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OVER_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OVER_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_IN_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_IN_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_OUT_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_OUT_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_SRC_ATOP_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_DST_ATOP_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_XOR_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_RGB_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARDODGE_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARBURN_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_VIVIDLIGHT_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_LINEARLIGHT_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PINLIGHT_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_HARDMIX_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_CLAMPED_ALPHA_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_PLUS_DARKER_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_MINUS_CLAMPED_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_CONTRAST_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_INVERT_OVG_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_RED_EXT',+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_GREEN_EXT', or+--     'Vulkan.Core10.Enums.BlendOp.BLEND_OP_BLUE_EXT'+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-01410# If+--     @colorBlendOp@ or @alphaBlendOp@ is an+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>,+--     then @colorAttachmentCount@ of the subpass this pipeline is compiled+--     against /must/ be less than or equal to+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT'::advancedBlendMaxColorAttachments+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04454#+--     If the @VK_KHR_portability_subset@ extension is enabled, and+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @srcColorBlendFactor@+--     /must/ not be+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'.+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-constantAlphaColorBlendFactors-04455#+--     If the @VK_KHR_portability_subset@ extension is enabled, and+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@constantAlphaColorBlendFactors@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', @dstColorBlendFactor@+--     /must/ not be+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA' or+--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA'.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-parameter#+--     @srcColorBlendFactor@ /must/ be a valid+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-parameter#+--     @dstColorBlendFactor@ /must/ be a valid+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-colorBlendOp-parameter#+--     @colorBlendOp@ /must/ be a valid+--     'Vulkan.Core10.Enums.BlendOp.BlendOp' value+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-parameter#+--     @srcAlphaBlendFactor@ /must/ be a valid+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-parameter#+--     @dstAlphaBlendFactor@ /must/ be a valid+--     'Vulkan.Core10.Enums.BlendFactor.BlendFactor' value+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-alphaBlendOp-parameter#+--     @alphaBlendOp@ /must/ be a valid+--     'Vulkan.Core10.Enums.BlendOp.BlendOp' value+--+-- -   #VUID-VkPipelineColorBlendAttachmentState-colorWriteMask-parameter#+--     @colorWriteMask@ /must/ be a valid combination of+--     'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'+--     values+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.BlendFactor.BlendFactor',+-- 'Vulkan.Core10.Enums.BlendOp.BlendOp',+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlags',+-- 'PipelineColorBlendStateCreateInfo'+data PipelineColorBlendAttachmentState = PipelineColorBlendAttachmentState+  { -- | @blendEnable@ controls whether blending is enabled for the corresponding+    -- color attachment. If blending is not enabled, the source fragment’s+    -- color for that attachment is passed through unmodified.+    blendEnable :: Bool+  , -- | @srcColorBlendFactor@ selects which blend factor is used to determine+    -- the source factors (Sr,Sg,Sb).+    srcColorBlendFactor :: BlendFactor+  , -- | @dstColorBlendFactor@ selects which blend factor is used to determine+    -- the destination factors (Dr,Dg,Db).+    dstColorBlendFactor :: BlendFactor+  , -- | @colorBlendOp@ selects which blend operation is used to calculate the+    -- RGB values to write to the color attachment.+    colorBlendOp :: BlendOp+  , -- | @srcAlphaBlendFactor@ selects which blend factor is used to determine+    -- the source factor Sa.+    srcAlphaBlendFactor :: BlendFactor+  , -- | @dstAlphaBlendFactor@ selects which blend factor is used to determine+    -- the destination factor Da.+    dstAlphaBlendFactor :: BlendFactor+  , -- | @alphaBlendOp@ selects which blend operation is use to calculate the+    -- alpha values to write to the color attachment.+    alphaBlendOp :: BlendOp+  , -- | @colorWriteMask@ is a bitmask of+    -- 'Vulkan.Core10.Enums.ColorComponentFlagBits.ColorComponentFlagBits'+    -- specifying which of the R, G, B, and\/or A components are enabled for+    -- writing, as described for the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-color-write-mask Color Write Mask>.+    colorWriteMask :: ColorComponentFlags+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineColorBlendAttachmentState)+#endif+deriving instance Show PipelineColorBlendAttachmentState++instance ToCStruct PipelineColorBlendAttachmentState where+  withCStruct x f = allocaBytesAligned 32 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineColorBlendAttachmentState{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (blendEnable))+    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (srcColorBlendFactor)+    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (dstColorBlendFactor)+    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (colorBlendOp)+    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (srcAlphaBlendFactor)+    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (dstAlphaBlendFactor)+    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (alphaBlendOp)+    poke ((p `plusPtr` 28 :: Ptr ColorComponentFlags)) (colorWriteMask)+    f+  cStructSize = 32+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 4 :: Ptr BlendFactor)) (zero)+    poke ((p `plusPtr` 8 :: Ptr BlendFactor)) (zero)+    poke ((p `plusPtr` 12 :: Ptr BlendOp)) (zero)+    poke ((p `plusPtr` 16 :: Ptr BlendFactor)) (zero)+    poke ((p `plusPtr` 20 :: Ptr BlendFactor)) (zero)+    poke ((p `plusPtr` 24 :: Ptr BlendOp)) (zero)+    f++instance FromCStruct PipelineColorBlendAttachmentState where+  peekCStruct p = do+    blendEnable <- peek @Bool32 ((p `plusPtr` 0 :: Ptr Bool32))+    srcColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 4 :: Ptr BlendFactor))+    dstColorBlendFactor <- peek @BlendFactor ((p `plusPtr` 8 :: Ptr BlendFactor))+    colorBlendOp <- peek @BlendOp ((p `plusPtr` 12 :: Ptr BlendOp))+    srcAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 16 :: Ptr BlendFactor))+    dstAlphaBlendFactor <- peek @BlendFactor ((p `plusPtr` 20 :: Ptr BlendFactor))+    alphaBlendOp <- peek @BlendOp ((p `plusPtr` 24 :: Ptr BlendOp))+    colorWriteMask <- peek @ColorComponentFlags ((p `plusPtr` 28 :: Ptr ColorComponentFlags))+    pure $ PipelineColorBlendAttachmentState+             (bool32ToBool blendEnable) srcColorBlendFactor dstColorBlendFactor colorBlendOp srcAlphaBlendFactor dstAlphaBlendFactor alphaBlendOp colorWriteMask++instance Storable PipelineColorBlendAttachmentState where+  sizeOf ~_ = 32+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PipelineColorBlendAttachmentState where+  zero = PipelineColorBlendAttachmentState+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of+-- a newly created pipeline color blend state+--+-- = Description+--+-- Each element of the @pAttachments@ array is a+-- 'PipelineColorBlendAttachmentState' structure specifying per-target+-- blending state for each individual color attachment. If the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-independentBlend independent blending>+-- feature is not enabled on the device, all+-- 'PipelineColorBlendAttachmentState' elements in the @pAttachments@ array+-- /must/ be identical.+--+-- The value of @attachmentCount@ /must/ be greater than the index of all+-- color attachments that are not+-- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' in+-- 'Vulkan.Core10.Pass.SubpassDescription'::@pColorAttachments@ or+-- 'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.SubpassDescription2'::@pColorAttachments@+-- for the subpass in which this pipeline is used.+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-independentBlend independent blending>+--     feature is not enabled, all elements of @pAttachments@ /must/ be+--     identical+--+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606# If+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-logicOp logic operations>+--     feature is not enabled, @logicOpEnable@ /must/ be+--     'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607# If+--     @logicOpEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', @logicOp@+--     /must/ be a valid 'Vulkan.Core10.Enums.LogicOp.LogicOp' value+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-pNext-pNext# @pNext@+--     /must/ be @NULL@ or a pointer to a valid instance of+--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PipelineColorBlendAdvancedStateCreateInfoEXT'+--+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-flags-zerobitmask# @flags@+--     /must/ be @0@+--+-- -   #VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-parameter# If+--     @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid+--     pointer to an array of @attachmentCount@ valid+--     'PipelineColorBlendAttachmentState' structures+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Core10.Enums.LogicOp.LogicOp',+-- 'PipelineColorBlendAttachmentState',+-- 'Vulkan.Core10.Enums.PipelineColorBlendStateCreateFlags.PipelineColorBlendStateCreateFlags',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineColorBlendStateCreateInfo (es :: [Type]) = PipelineColorBlendStateCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is reserved for future use.+    flags :: PipelineColorBlendStateCreateFlags+  , -- | @logicOpEnable@ controls whether to apply+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-logicop Logical Operations>.+    logicOpEnable :: Bool+  , -- | @logicOp@ selects which logical operation to apply.+    logicOp :: LogicOp+  , -- | @pAttachments@: is a pointer to an array of per target attachment+    -- states.+    attachments :: Vector PipelineColorBlendAttachmentState+  , -- | @blendConstants@ is a pointer to an array of four values used as the R,+    -- G, B, and A components of the blend constant that are used in blending,+    -- depending on the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors blend factor>.+    blendConstants :: (Float, Float, Float, Float)+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineColorBlendStateCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (PipelineColorBlendStateCreateInfo es)++instance Extensible PipelineColorBlendStateCreateInfo where+  extensibleType = STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO+  setNext x next = x{next = next}+  getNext PipelineColorBlendStateCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends PipelineColorBlendStateCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineColorBlendAdvancedStateCreateInfoEXT = Just f+    | otherwise = Nothing++instance (Extendss PipelineColorBlendStateCreateInfo es, PokeChain es) => ToCStruct (PipelineColorBlendStateCreateInfo es) where+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineColorBlendStateCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (logicOpEnable))+    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (logicOp)+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (attachments)) :: Word32))+    pPAttachments' <- ContT $ allocaBytesAligned @PipelineColorBlendAttachmentState ((Data.Vector.length (attachments)) * 32) 4+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e) . ($ ())) (attachments)+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')+    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))+    lift $ case (blendConstants) of+      (e0, e1, e2, e3) -> do+        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))+        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))+        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))+        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+    lift $ f+  cStructSize = 56+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 24 :: Ptr LogicOp)) (zero)+    pPAttachments' <- ContT $ allocaBytesAligned @PipelineColorBlendAttachmentState ((Data.Vector.length (mempty)) * 32) 4+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPAttachments' `plusPtr` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState))) (pPAttachments')+    let pBlendConstants' = lowerArrayPtr ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))+    lift $ case ((zero, zero, zero, zero)) of+      (e0, e1, e2, e3) -> do+        poke (pBlendConstants' :: Ptr CFloat) (CFloat (e0))+        poke (pBlendConstants' `plusPtr` 4 :: Ptr CFloat) (CFloat (e1))+        poke (pBlendConstants' `plusPtr` 8 :: Ptr CFloat) (CFloat (e2))+        poke (pBlendConstants' `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+    lift $ f++instance (Extendss PipelineColorBlendStateCreateInfo es, PeekChain es) => FromCStruct (PipelineColorBlendStateCreateInfo es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineColorBlendStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineColorBlendStateCreateFlags))+    logicOpEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))+    logicOp <- peek @LogicOp ((p `plusPtr` 24 :: Ptr LogicOp))+    attachmentCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))+    pAttachments <- peek @(Ptr PipelineColorBlendAttachmentState) ((p `plusPtr` 32 :: Ptr (Ptr PipelineColorBlendAttachmentState)))+    pAttachments' <- generateM (fromIntegral attachmentCount) (\i -> peekCStruct @PipelineColorBlendAttachmentState ((pAttachments `advancePtrBytes` (32 * (i)) :: Ptr PipelineColorBlendAttachmentState)))+    let pblendConstants = lowerArrayPtr @CFloat ((p `plusPtr` 40 :: Ptr (FixedArray 4 CFloat)))+    blendConstants0 <- peek @CFloat ((pblendConstants `advancePtrBytes` 0 :: Ptr CFloat))+    blendConstants1 <- peek @CFloat ((pblendConstants `advancePtrBytes` 4 :: Ptr CFloat))+    blendConstants2 <- peek @CFloat ((pblendConstants `advancePtrBytes` 8 :: Ptr CFloat))+    blendConstants3 <- peek @CFloat ((pblendConstants `advancePtrBytes` 12 :: Ptr CFloat))+    pure $ PipelineColorBlendStateCreateInfo+             next flags (bool32ToBool logicOpEnable) logicOp pAttachments' ((((\(CFloat a) -> a) blendConstants0), ((\(CFloat a) -> a) blendConstants1), ((\(CFloat a) -> a) blendConstants2), ((\(CFloat a) -> a) blendConstants3)))++instance es ~ '[] => Zero (PipelineColorBlendStateCreateInfo es) where+  zero = PipelineColorBlendStateCreateInfo+           ()+           zero+           zero+           zero+           mempty+           (zero, zero, zero, zero)+++-- | VkPipelineDynamicStateCreateInfo - Structure specifying parameters of a+-- newly created pipeline dynamic state+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-01442# Each+--     element of @pDynamicStates@ /must/ be unique+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineDynamicStateCreateInfo-sType-sType# @sType@ /must/+--     be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineDynamicStateCreateInfo-pNext-pNext# @pNext@ /must/+--     be @NULL@+--+-- -   #VUID-VkPipelineDynamicStateCreateInfo-flags-zerobitmask# @flags@+--     /must/ be @0@+--+-- -   #VUID-VkPipelineDynamicStateCreateInfo-pDynamicStates-parameter# If+--     @dynamicStateCount@ is not @0@, @pDynamicStates@ /must/ be a valid+--     pointer to an array of @dynamicStateCount@ valid+--     'Vulkan.Core10.Enums.DynamicState.DynamicState' values+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.DynamicState.DynamicState',+-- 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Core10.Enums.PipelineDynamicStateCreateFlags.PipelineDynamicStateCreateFlags',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineDynamicStateCreateInfo = PipelineDynamicStateCreateInfo+  { -- | @flags@ is reserved for future use.+    flags :: PipelineDynamicStateCreateFlags+  , -- | @pDynamicStates@ is a pointer to an array of+    -- 'Vulkan.Core10.Enums.DynamicState.DynamicState' values specifying which+    -- pieces of pipeline state will use the values from dynamic state commands+    -- rather than from pipeline state creation info.+    dynamicStates :: Vector DynamicState+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineDynamicStateCreateInfo)+#endif+deriving instance Show PipelineDynamicStateCreateInfo++instance ToCStruct PipelineDynamicStateCreateInfo where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineDynamicStateCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (dynamicStates)) :: Word32))+    pPDynamicStates' <- ContT $ allocaBytesAligned @DynamicState ((Data.Vector.length (dynamicStates)) * 4) 4+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (dynamicStates)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')+    lift $ f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    pPDynamicStates' <- ContT $ allocaBytesAligned @DynamicState ((Data.Vector.length (mempty)) * 4) 4+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDynamicStates' `plusPtr` (4 * (i)) :: Ptr DynamicState) (e)) (mempty)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DynamicState))) (pPDynamicStates')+    lift $ f++instance FromCStruct PipelineDynamicStateCreateInfo where+  peekCStruct p = do+    flags <- peek @PipelineDynamicStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDynamicStateCreateFlags))+    dynamicStateCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    pDynamicStates <- peek @(Ptr DynamicState) ((p `plusPtr` 24 :: Ptr (Ptr DynamicState)))+    pDynamicStates' <- generateM (fromIntegral dynamicStateCount) (\i -> peek @DynamicState ((pDynamicStates `advancePtrBytes` (4 * (i)) :: Ptr DynamicState)))+    pure $ PipelineDynamicStateCreateInfo+             flags pDynamicStates'++instance Zero PipelineDynamicStateCreateInfo where+  zero = PipelineDynamicStateCreateInfo+           zero+           mempty+++-- | VkStencilOpState - Structure specifying stencil operation state+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.CompareOp.CompareOp',+-- 'PipelineDepthStencilStateCreateInfo',+-- 'Vulkan.Core10.Enums.StencilOp.StencilOp'+data StencilOpState = StencilOpState+  { -- | @failOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value specifying+    -- the action performed on samples that fail the stencil test.+    --+    -- #VUID-VkStencilOpState-failOp-parameter# @failOp@ /must/ be a valid+    -- 'Vulkan.Core10.Enums.StencilOp.StencilOp' value+    failOp :: StencilOp+  , -- | @passOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value specifying+    -- the action performed on samples that pass both the depth and stencil+    -- tests.+    --+    -- #VUID-VkStencilOpState-passOp-parameter# @passOp@ /must/ be a valid+    -- 'Vulkan.Core10.Enums.StencilOp.StencilOp' value+    passOp :: StencilOp+  , -- | @depthFailOp@ is a 'Vulkan.Core10.Enums.StencilOp.StencilOp' value+    -- specifying the action performed on samples that pass the stencil test+    -- and fail the depth test.+    --+    -- #VUID-VkStencilOpState-depthFailOp-parameter# @depthFailOp@ /must/ be a+    -- valid 'Vulkan.Core10.Enums.StencilOp.StencilOp' value+    depthFailOp :: StencilOp+  , -- | @compareOp@ is a 'Vulkan.Core10.Enums.CompareOp.CompareOp' value+    -- specifying the comparison operator used in the stencil test.+    --+    -- #VUID-VkStencilOpState-compareOp-parameter# @compareOp@ /must/ be a+    -- valid 'Vulkan.Core10.Enums.CompareOp.CompareOp' value+    compareOp :: CompareOp+  , -- | @compareMask@ selects the bits of the unsigned integer stencil values+    -- participating in the stencil test.+    compareMask :: Word32+  , -- | @writeMask@ selects the bits of the unsigned integer stencil values+    -- updated by the stencil test in the stencil framebuffer attachment.+    writeMask :: Word32+  , -- | @reference@ is an integer reference value that is used in the unsigned+    -- stencil comparison.+    reference :: Word32+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (StencilOpState)+#endif+deriving instance Show StencilOpState++instance ToCStruct StencilOpState where+  withCStruct x f = allocaBytesAligned 28 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p StencilOpState{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (failOp)+    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (passOp)+    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (depthFailOp)+    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (compareOp)+    poke ((p `plusPtr` 16 :: Ptr Word32)) (compareMask)+    poke ((p `plusPtr` 20 :: Ptr Word32)) (writeMask)+    poke ((p `plusPtr` 24 :: Ptr Word32)) (reference)+    f+  cStructSize = 28+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StencilOp)) (zero)+    poke ((p `plusPtr` 4 :: Ptr StencilOp)) (zero)+    poke ((p `plusPtr` 8 :: Ptr StencilOp)) (zero)+    poke ((p `plusPtr` 12 :: Ptr CompareOp)) (zero)+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)+    f++instance FromCStruct StencilOpState where+  peekCStruct p = do+    failOp <- peek @StencilOp ((p `plusPtr` 0 :: Ptr StencilOp))+    passOp <- peek @StencilOp ((p `plusPtr` 4 :: Ptr StencilOp))+    depthFailOp <- peek @StencilOp ((p `plusPtr` 8 :: Ptr StencilOp))+    compareOp <- peek @CompareOp ((p `plusPtr` 12 :: Ptr CompareOp))+    compareMask <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))+    writeMask <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    reference <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))+    pure $ StencilOpState+             failOp passOp depthFailOp compareOp compareMask writeMask reference++instance Storable StencilOpState where+  sizeOf ~_ = 28+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero StencilOpState where+  zero = StencilOpState+           zero+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters+-- of a newly created pipeline depth stencil state+--+-- == Valid Usage+--+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBounds depth bounds testing>+--     feature is not enabled, @depthBoundsTestEnable@ /must/ be+--     'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-separateStencilMaskRef-04453#+--     If the @VK_KHR_portability_subset@ extension is enabled, and+--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@separateStencilMaskRef@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', and the value of+--     'PipelineDepthStencilStateCreateInfo'::@stencilTestEnable@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', and the value of+--     'PipelineRasterizationStateCreateInfo'::@cullMode@ is+--     'Vulkan.Core10.Enums.CullModeFlagBits.CULL_MODE_NONE', the value of+--     @reference@ in each of the 'StencilOpState' structs in @front@ and+--     @back@ /must/ be the same.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO'+--+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-pNext-pNext# @pNext@+--     /must/ be @NULL@+--+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-flags-zerobitmask#+--     @flags@ /must/ be @0@+--+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-depthCompareOp-parameter#+--     @depthCompareOp@ /must/ be a valid+--     'Vulkan.Core10.Enums.CompareOp.CompareOp' value+--+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-front-parameter# @front@+--     /must/ be a valid 'StencilOpState' structure+--+-- -   #VUID-VkPipelineDepthStencilStateCreateInfo-back-parameter# @back@+--     /must/ be a valid 'StencilOpState' structure+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Enums.CompareOp.CompareOp', 'GraphicsPipelineCreateInfo',+-- 'Vulkan.Core10.Enums.PipelineDepthStencilStateCreateFlags.PipelineDepthStencilStateCreateFlags',+-- 'StencilOpState', 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineDepthStencilStateCreateInfo = PipelineDepthStencilStateCreateInfo+  { -- | @flags@ is reserved for future use.+    flags :: PipelineDepthStencilStateCreateFlags+  , -- | @depthTestEnable@ controls whether+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth testing>+    -- is enabled.+    depthTestEnable :: Bool+  , -- | @depthWriteEnable@ controls whether+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth-write depth writes>+    -- are enabled when @depthTestEnable@ is+    -- 'Vulkan.Core10.FundamentalTypes.TRUE'. Depth writes are always disabled+    -- when @depthTestEnable@ is 'Vulkan.Core10.FundamentalTypes.FALSE'.+    depthWriteEnable :: Bool+  , -- | @depthCompareOp@ is the comparison operator used in the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth depth test>.+    depthCompareOp :: CompareOp+  , -- | @depthBoundsTestEnable@ controls whether+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds testing>+    -- is enabled.+    depthBoundsTestEnable :: Bool+  , -- | @stencilTestEnable@ controls whether+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil stencil testing>+    -- is enabled.+    stencilTestEnable :: Bool+  , -- | @front@ and @back@ control the parameters of the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil stencil test>.+    front :: StencilOpState+  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "back"+    back :: StencilOpState+  , -- | @minDepthBounds@ is the minimum depth bound used in the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds test>.+    minDepthBounds :: Float+  , -- | @maxDepthBounds@ is the maximum depth bound used in the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-dbt depth bounds test>.+    maxDepthBounds :: Float+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineDepthStencilStateCreateInfo)+#endif+deriving instance Show PipelineDepthStencilStateCreateInfo++instance ToCStruct PipelineDepthStencilStateCreateInfo where+  withCStruct x f = allocaBytesAligned 104 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineDepthStencilStateCreateInfo{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (depthTestEnable))+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (depthWriteEnable))+    lift $ poke ((p `plusPtr` 28 :: Ptr CompareOp)) (depthCompareOp)+    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (depthBoundsTestEnable))+    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (stencilTestEnable))+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr StencilOpState)) (front) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 68 :: Ptr StencilOpState)) (back) . ($ ())+    lift $ poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (minDepthBounds))+    lift $ poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (maxDepthBounds))+    lift $ f+  cStructSize = 104+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 28 :: Ptr CompareOp)) (zero)+    lift $ poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))+    ContT $ pokeCStruct ((p `plusPtr` 40 :: Ptr StencilOpState)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 68 :: Ptr StencilOpState)) (zero) . ($ ())+    lift $ poke ((p `plusPtr` 96 :: Ptr CFloat)) (CFloat (zero))+    lift $ poke ((p `plusPtr` 100 :: Ptr CFloat)) (CFloat (zero))+    lift $ f++instance FromCStruct PipelineDepthStencilStateCreateInfo where+  peekCStruct p = do+    flags <- peek @PipelineDepthStencilStateCreateFlags ((p `plusPtr` 16 :: Ptr PipelineDepthStencilStateCreateFlags))+    depthTestEnable <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))+    depthWriteEnable <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))+    depthCompareOp <- peek @CompareOp ((p `plusPtr` 28 :: Ptr CompareOp))+    depthBoundsTestEnable <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))+    stencilTestEnable <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))+    front <- peekCStruct @StencilOpState ((p `plusPtr` 40 :: Ptr StencilOpState))+    back <- peekCStruct @StencilOpState ((p `plusPtr` 68 :: Ptr StencilOpState))+    minDepthBounds <- peek @CFloat ((p `plusPtr` 96 :: Ptr CFloat))+    maxDepthBounds <- peek @CFloat ((p `plusPtr` 100 :: Ptr CFloat))+    pure $ PipelineDepthStencilStateCreateInfo+             flags (bool32ToBool depthTestEnable) (bool32ToBool depthWriteEnable) depthCompareOp (bool32ToBool depthBoundsTestEnable) (bool32ToBool stencilTestEnable) front back ((\(CFloat a) -> a) minDepthBounds) ((\(CFloat a) -> a) maxDepthBounds)++instance Zero PipelineDepthStencilStateCreateInfo where+  zero = PipelineDepthStencilStateCreateInfo+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a+-- newly created graphics pipeline+--+-- = Description+--+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are+-- described in more detail in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.+--+-- If any shader stage fails to compile, the compile log will be reported+-- back to the application, and+-- 'Vulkan.Core10.Enums.Result.ERROR_INVALID_SHADER_NV' will be generated.+--+-- == Valid Usage+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00722# If @flags@ contains+--     the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be+--     a valid handle to a graphics 'Vulkan.Core10.Handles.Pipeline'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00723# If @flags@ contains+--     the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineHandle@ is+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/+--     be a valid index into the calling command’s @pCreateInfos@ parameter+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00724# If @flags@ contains+--     the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/+--     be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00725# If @flags@ contains+--     the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineHandle@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/+--     be -1+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-stage-00726# The @stage@ member+--     of each element of @pStages@ /must/ be unique+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02095# The geometric+--     shader stages provided in @pStages@ /must/ be either from the mesh+--     shading pipeline (@stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_NV'+--     or+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV')+--     or from the primitive shading pipeline (@stage@ is+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT',+--     or+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT')+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-stage-02096# The @stage@ member+--     of one element of @pStages@ /must/ be either+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT' or+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_NV'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-stage-00728# The @stage@ member+--     of each element of @pStages@ /must/ not be+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00729# If @pStages@+--     includes a tessellation control shader stage, it /must/ include a+--     tessellation evaluation shader stage+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00730# If @pStages@+--     includes a tessellation evaluation shader stage, it /must/ include a+--     tessellation control shader stage+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00731# If @pStages@+--     includes a tessellation control shader stage and a tessellation+--     evaluation shader stage, @pTessellationState@ /must/ be a valid+--     pointer to a valid 'PipelineTessellationStateCreateInfo' structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00732# If @pStages@+--     includes tessellation shader stages, the shader code of at least one+--     stage /must/ contain an @OpExecutionMode@ instruction that specifies+--     the type of subdivision in the pipeline+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00733# If @pStages@+--     includes tessellation shader stages, and the shader code of both+--     stages contain an @OpExecutionMode@ instruction that specifies the+--     type of subdivision in the pipeline, they /must/ both specify the+--     same subdivision mode+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00734# If @pStages@+--     includes tessellation shader stages, the shader code of at least one+--     stage /must/ contain an @OpExecutionMode@ instruction that specifies+--     the output patch size in the pipeline+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00735# If @pStages@+--     includes tessellation shader stages, and the shader code of both+--     contain an @OpExecutionMode@ instruction that specifies the out+--     patch size in the pipeline, they /must/ both specify the same patch+--     size+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00736# If @pStages@+--     includes tessellation shader stages, the @topology@ member of+--     @pInputAssembly@ /must/ be+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-topology-00737# If the @topology@+--     member of @pInputAssembly@ is+--     'Vulkan.Core10.Enums.PrimitiveTopology.PRIMITIVE_TOPOLOGY_PATCH_LIST',+--     @pStages@ /must/ include tessellation shader stages+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00738# If @pStages@+--     includes a geometry shader stage, and does not include any+--     tessellation shader stages, its shader code /must/ contain an+--     @OpExecutionMode@ instruction that specifies an input primitive type+--     that is+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution compatible>+--     with the primitive topology specified in @pInputAssembly@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00739# If @pStages@+--     includes a geometry shader stage, and also includes tessellation+--     shader stages, its shader code /must/ contain an @OpExecutionMode@+--     instruction that specifies an input primitive type that is+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution compatible>+--     with the primitive topology that is output by the tessellation+--     stages+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00740# If @pStages@+--     includes a fragment shader stage and a geometry shader stage, and+--     the fragment shader code reads from an input variable that is+--     decorated with @PrimitiveID@, then the geometry shader code /must/+--     write to a matching output variable, decorated with @PrimitiveID@,+--     in all execution paths+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00741# If @pStages@+--     includes a fragment shader stage, its shader code /must/ not read+--     from any input attachment that is defined as+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' in @subpass@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-00742# The shader code+--     for the entry points identified by @pStages@, and the rest of the+--     state identified by this structure /must/ adhere to the pipeline+--     linking rules described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>+--     chapter+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01756# If rasterization+--     is not disabled and @subpass@ uses a depth\/stencil attachment in+--     @renderPass@ that has a layout of+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'+--     or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'+--     in the 'Vulkan.Core10.Pass.AttachmentReference' defined by+--     @subpass@, the @depthWriteEnable@ member of @pDepthStencilState@+--     /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01757# If rasterization+--     is not disabled and @subpass@ uses a depth\/stencil attachment in+--     @renderPass@ that has a layout of+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL'+--     or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL'+--     in the 'Vulkan.Core10.Pass.AttachmentReference' defined by+--     @subpass@, the @failOp@, @passOp@ and @depthFailOp@ members of each+--     of the @front@ and @back@ members of @pDepthStencilState@ /must/ be+--     'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-blendEnable-02023# If+--     rasterization is not disabled and the subpass uses color+--     attachments, then for each color attachment in the subpass the+--     @blendEnable@ member of the corresponding element of the+--     @pAttachment@ member of @pColorBlendState@ /must/ be+--     'Vulkan.Core10.FundamentalTypes.FALSE' if the attached image’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     does not contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-attachmentCount-00746# If+--     rasterization is not disabled and the subpass uses color+--     attachments, the @attachmentCount@ member of @pColorBlendState@+--     /must/ be equal to the @colorAttachmentCount@ used to create+--     @subpass@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04130# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' or+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT',+--     the @pViewports@ member of @pViewportState@ /must/ be a valid+--     pointer to an array of @pViewportState->viewportCount@ valid+--     'Viewport' structures+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04131# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' or+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT',+--     the @pScissors@ member of @pViewportState@ /must/ be a valid pointer+--     to an array of @pViewportState->scissorCount@+--     'Vulkan.Core10.FundamentalTypes.Rect2D' structures+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749# If the wide+--     lines feature is not enabled, and no element of the @pDynamicStates@+--     member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH', the+--     @lineWidth@ member of @pRasterizationState@ /must/ be @1.0@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750# If+--     the @rasterizerDiscardEnable@ member of @pRasterizationState@ is+--     'Vulkan.Core10.FundamentalTypes.FALSE', @pViewportState@ /must/ be a+--     valid pointer to a valid 'PipelineViewportStateCreateInfo' structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751# If+--     the @rasterizerDiscardEnable@ member of @pRasterizationState@ is+--     'Vulkan.Core10.FundamentalTypes.FALSE', @pMultisampleState@ /must/+--     be a valid pointer to a valid 'PipelineMultisampleStateCreateInfo'+--     structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00752# If+--     the @rasterizerDiscardEnable@ member of @pRasterizationState@ is+--     'Vulkan.Core10.FundamentalTypes.FALSE', and @subpass@ uses a+--     depth\/stencil attachment, @pDepthStencilState@ /must/ be a valid+--     pointer to a valid 'PipelineDepthStencilStateCreateInfo' structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00753# If+--     the @rasterizerDiscardEnable@ member of @pRasterizationState@ is+--     'Vulkan.Core10.FundamentalTypes.FALSE', and @subpass@ uses color+--     attachments, @pColorBlendState@ /must/ be a valid pointer to a valid+--     'PipelineColorBlendStateCreateInfo' structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-04493# If+--     the @rasterizerDiscardEnable@ member of @pRasterizationState@ is+--     'Vulkan.Core10.FundamentalTypes.FALSE',+--     @pColorBlendState->attachmentCount@ /must/ be greater than the index+--     of all color attachments that are not+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' for the @subpass@+--     index in @renderPass@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754# If the+--     depth bias clamping feature is not enabled, no element of the+--     @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS', and the+--     @depthBiasEnable@ member of @pRasterizationState@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @depthBiasClamp@ member+--     of @pRasterizationState@ /must/ be @0.0@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-02510# If the+--     @VK_EXT_depth_range_unrestricted@ extension is not enabled and no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS', and+--     the @depthBoundsTestEnable@ member of @pDepthStencilState@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @minDepthBounds@ and+--     @maxDepthBounds@ members of @pDepthStencilState@ /must/ be between+--     @0.0@ and @1.0@, inclusive+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01521# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',+--     and the @sampleLocationsEnable@ member of a+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'+--     structure included in the @pNext@ chain of @pMultisampleState@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE',+--     @sampleLocationsInfo.sampleLocationGridSize.width@ /must/ evenly+--     divide+--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.width@+--     as returned by+--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'+--     with a @samples@ parameter equaling @rasterizationSamples@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01522# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',+--     and the @sampleLocationsEnable@ member of a+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'+--     structure included in the @pNext@ chain of @pMultisampleState@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE',+--     @sampleLocationsInfo.sampleLocationGridSize.height@ /must/ evenly+--     divide+--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.height@+--     as returned by+--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'+--     with a @samples@ parameter equaling @rasterizationSamples@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01523# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT',+--     and the @sampleLocationsEnable@ member of a+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'+--     structure included in the @pNext@ chain of @pMultisampleState@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE',+--     @sampleLocationsInfo.sampleLocationsPerPixel@ /must/ equal+--     @rasterizationSamples@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-sampleLocationsEnable-01524# If+--     the @sampleLocationsEnable@ member of a+--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'+--     structure included in the @pNext@ chain of @pMultisampleState@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', the fragment shader code+--     /must/ not statically use the extended instruction+--     @InterpolateAtSample@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-layout-00756# @layout@ /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>+--     with all shaders specified in @pStages@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-00757# If neither the+--     @VK_AMD_mixed_attachment_samples@ nor the+--     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if+--     @subpass@ uses color and\/or depth\/stencil attachments, then the+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the+--     same as the sample count for those subpass attachments+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01505# If the+--     @VK_AMD_mixed_attachment_samples@ extension is enabled, and if+--     @subpass@ uses color and\/or depth\/stencil attachments, then the+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ equal+--     the maximum of the sample counts of those subpass attachments+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01411# If the+--     @VK_NV_framebuffer_mixed_samples@ extension is enabled, and if+--     @subpass@ has a depth\/stencil attachment and depth test, stencil+--     test, or depth bounds test are enabled, then the+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the+--     same as the sample count of the depth\/stencil attachment+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-01412# If the+--     @VK_NV_framebuffer_mixed_samples@ extension is enabled, and if+--     @subpass@ has any color attachments, then the @rasterizationSamples@+--     member of @pMultisampleState@ /must/ be greater than or equal to the+--     sample count for those subpass attachments+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-coverageReductionMode-02722# If+--     the @VK_NV_coverage_reduction_mode@ extension is enabled, the+--     coverage reduction mode specified by+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PipelineCoverageReductionStateCreateInfoNV'::@coverageReductionMode@,+--     the @rasterizationSamples@ member of @pMultisampleState@ and the+--     sample counts for the color and depth\/stencil attachments (if the+--     subpass has them) /must/ be a valid combination returned by+--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-00758# If @subpass@ does+--     not use any color and\/or depth\/stencil attachments, then the+--     @rasterizationSamples@ member of @pMultisampleState@ /must/ follow+--     the rules for a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments zero-attachment subpass>+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-subpass-00759# @subpass@ /must/+--     be a valid subpass within @renderPass@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-00760# If the+--     @renderPass@ has multiview enabled and @subpass@ has more than one+--     bit set in the view mask and @multiviewTessellationShader@ is not+--     enabled, then @pStages@ /must/ not include tessellation shaders+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-00761# If the+--     @renderPass@ has multiview enabled and @subpass@ has more than one+--     bit set in the view mask and @multiviewGeometryShader@ is not+--     enabled, then @pStages@ /must/ not include a geometry shader+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-00762# If the+--     @renderPass@ has multiview enabled and @subpass@ has more than one+--     bit set in the view mask, shaders in the pipeline /must/ not write+--     to the @Layer@ built-in output+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-00763# If the+--     @renderPass@ has multiview enabled, then all shaders /must/ not+--     include variables decorated with the @Layer@ built-in decoration in+--     their interfaces+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-00764# @flags@ /must/ not+--     contain the+--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.PIPELINE_CREATE_DISPATCH_BASE'+--     flag+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-01565# If @pStages@+--     includes a fragment shader stage and an input attachment was+--     referenced by an @aspectMask@ at @renderPass@ creation time, its+--     shader code /must/ only read from the aspects that were specified+--     for that input attachment+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-layout-01688# The number of+--     resources in @layout@ accessible to each shader stage that is used+--     by the pipeline /must/ be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01715# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV',+--     and the @viewportWScalingEnable@ member of a+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'+--     structure, included in the @pNext@ chain of @pViewportState@, is+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @pViewportWScalings@+--     member of the+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'+--     /must/ be a pointer to an array of+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@+--     valid+--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.ViewportWScalingNV'+--     structures+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04056# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV',+--     and if @pViewportState->pNext@ chain includes a+--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'+--     structure, and if its @exclusiveScissorCount@ member is not @0@,+--     then its @pExclusiveScissors@ member /must/ be a valid pointer to an+--     array of @exclusiveScissorCount@+--     'Vulkan.Core10.FundamentalTypes.Rect2D' structures+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04057# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV',+--     and if @pViewportState->pNext@ chain includes a+--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'+--     structure, then its @pShadingRatePalettes@ member /must/ be a valid+--     pointer to an array of @viewportCount@ valid+--     'Vulkan.Extensions.VK_NV_shading_rate_image.ShadingRatePaletteNV'+--     structures+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04058# If no+--     element of the @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_EXT',+--     and if @pNext@ chain includes a+--     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'+--     structure, and if its @discardRectangleCount@ member is not @0@,+--     then its @pDiscardRectangles@ member /must/ be a valid pointer to an+--     array of @discardRectangleCount@+--     'Vulkan.Core10.FundamentalTypes.Rect2D' structures+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02097# If @pStages@+--     includes a vertex shader stage, @pVertexInputState@ /must/ be a+--     valid pointer to a valid 'PipelineVertexInputStateCreateInfo'+--     structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02098# If @pStages@+--     includes a vertex shader stage, @pInputAssemblyState@ /must/ be a+--     valid pointer to a valid 'PipelineInputAssemblyStateCreateInfo'+--     structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02317# The @Xfb@+--     execution mode /can/ be specified by only one shader stage in+--     @pStages@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-02318# If any shader+--     stage in @pStages@ specifies @Xfb@ execution mode it /must/ be the+--     last vertex processing stage+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02319# If a+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@+--     value other than zero is specified, all variables in the output+--     interface of the entry point being compiled decorated with+--     @Position@, @PointSize@, @ClipDistance@, or @CullDistance@ /must/+--     all be decorated with identical @Stream@ values that match the+--     @rasterizationStream@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-rasterizationStream-02320# If+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@+--     is zero, or not specified, all variables in the output interface of+--     the entry point being compiled decorated with @Position@,+--     @PointSize@, @ClipDistance@, or @CullDistance@ /must/ all be+--     decorated with a @Stream@ value of zero, or /must/ not specify the+--     @Stream@ decoration+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-geometryStreams-02321# If the+--     last vertex processing stage is a geometry shader, and that geometry+--     shader uses the @GeometryStreams@ capability, then+--     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@+--     feature /must/ be enabled+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-None-02322# If there are any mesh+--     shader stages in the pipeline there /must/ not be any shader stage+--     in the pipeline with a @Xfb@ execution mode+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766# If+--     the @lineRasterizationMode@ member of a+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'+--     structure included in the @pNext@ chain of @pRasterizationState@ is+--     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_BRESENHAM_EXT'+--     or+--     'Vulkan.Extensions.VK_EXT_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT'+--     and if rasterization is enabled, then the @alphaToCoverageEnable@,+--     @alphaToOneEnable@, and @sampleShadingEnable@ members of+--     @pMultisampleState@ /must/ all be+--     'Vulkan.Core10.FundamentalTypes.FALSE'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-stippledLineEnable-02767# If the+--     @stippledLineEnable@ member of+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'+--     is 'Vulkan.Core10.FundamentalTypes.TRUE' and no element of the+--     @pDynamicStates@ member of @pDynamicState@ is+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_EXT',+--     then the @lineStippleFactor@ member of+--     'Vulkan.Extensions.VK_EXT_line_rasterization.PipelineRasterizationLineStateCreateInfoEXT'+--     /must/ be in the range [1,256]+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03371# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03372# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03373# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03374# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03375# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03376# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-03377# @flags@ /must/ not+--     include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03378# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState>+--     feature is not enabled, there /must/ be no element of the+--     @pDynamicStates@ member of @pDynamicState@ set to+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_CULL_MODE_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRONT_FACE_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT',+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT',+--     or 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_OP_EXT'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03379# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     is included in the @pDynamicStates@ array then @viewportCount@+--     /must/ be zero+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-03380# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     is included in the @pDynamicStates@ array then @scissorCount@ /must/+--     be zero+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04132# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     is included in the @pDynamicStates@ array then+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' /must/ not+--     be present+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-04133# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'+--     is included in the @pDynamicStates@ array then+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' /must/ not+--     be present+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-02877# If @flags@ includes+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',+--     then the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>+--     feature /must/ be enabled+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-02966# If @flags@ includes+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',+--     then all stages /must/ not specify @Xfb@ execution mode+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pipelineCreationCacheControl-02878#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>+--     feature is not enabled, @flags@ /must/ not include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'+--     or+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04494# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.width+--     /must/ be greater than or equal to @1@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04495# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.height+--     /must/ be greater than or equal to @1@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04496# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.width+--     /must/ be a power-of-two value+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04497# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.height+--     /must/ be a power-of-two value+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04498# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.width+--     /must/ be less than or equal to @4@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04499# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.height+--     /must/ be less than or equal to @4@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04500# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, and the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.width+--     and+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::fragmentSize.height+--     /must/ both be equal to @1@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04501# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, and the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[0]+--     /must/ be+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04502# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, and the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-attachmentFragmentShadingRate attachmentFragmentShadingRate feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@[1]+--     /must/ be+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04503#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+--     limit is not supported,+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'+--     is not included in @pDynamicState@->@pDynamicStates@, and+--     'PipelineViewportStateCreateInfo'::@viewportCount@ is greater than+--     @1@, entry points specified in @pStages@ /must/ not write to the+--     @PrimitiveShadingRateKHR@ built-in+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04504#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+--     limit is not supported, and entry points specified in @pStages@+--     write to the @ViewportIndex@ built-in, they /must/ not also write to+--     the @PrimitiveShadingRateKHR@ built-in+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-primitiveFragmentShadingRateWithMultipleViewports-04505#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>+--     limit is not supported, and entry points specified in @pStages@+--     write to the @ViewportMaskNV@ built-in, they /must/ not also write+--     to the @PrimitiveShadingRateKHR@ built-in+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04506#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentShadingRateNonTrivialCombinerOps>+--     limit is not supported and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, elements of+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'::@combinerOps@+--     /must/ be+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--     or+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04569# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, and the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentShadingRateEnums fragmentShadingRateEnums feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::shadingRateType+--     /must/ be equal to+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV'.+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04570# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, and the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::shadingRate+--     /must/ be equal to+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV'.+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04571# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, and the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@[0]+--     /must/ be+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-04572# If+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, and the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-attachmentFragmentShadingRate attachmentFragmentShadingRate feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@[1]+--     /must/ be+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-fragmentShadingRateNonTrivialCombinerOps-04573#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentShadingRateNonTrivialCombinerOps>+--     limit is not supported and+--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'+--     is not included in @pDynamicState@->@pDynamicStates@, elements of+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::@combinerOps@+--     /must/ be+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--     or+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-None-04574# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-supersampleFragmentShadingRates supersampleFragmentShadingRates feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::shadingRate+--     /must/ not be equal to+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV',+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV',+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV',+--     or+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV'.+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-None-04575# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-noInvocationFragmentShadingRates noInvocationFragmentShadingRates feature>+--     is not enabled,+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV'::shadingRate+--     /must/ not be equal to+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV'.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pNext-pNext# 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+--     'Vulkan.Extensions.VK_NV_device_generated_commands.GraphicsPipelineShaderGroupsCreateInfoNV',+--     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD',+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT',+--     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT',+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV',+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR',+--     or+--     'Vulkan.Extensions.VK_NV_representative_fragment_test.PipelineRepresentativeFragmentTestStateCreateInfoNV'+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-sType-unique# The @sType@ value+--     of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-flags-parameter# @flags@ /must/+--     be a valid combination of+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'+--     values+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pStages-parameter# @pStages@+--     /must/ be a valid pointer to an array of @stageCount@ valid+--     'PipelineShaderStageCreateInfo' structures+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pRasterizationState-parameter#+--     @pRasterizationState@ /must/ be a valid pointer to a valid+--     'PipelineRasterizationStateCreateInfo' structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-pDynamicState-parameter# If+--     @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid+--     pointer to a valid 'PipelineDynamicStateCreateInfo' structure+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-layout-parameter# @layout@ /must/+--     be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-renderPass-parameter#+--     @renderPass@ /must/ be a valid 'Vulkan.Core10.Handles.RenderPass'+--     handle+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-stageCount-arraylength#+--     @stageCount@ /must/ be greater than @0@+--+-- -   #VUID-VkGraphicsPipelineCreateInfo-commonparent# Each of+--     @basePipelineHandle@, @layout@, and @renderPass@ that are valid+--     handles of non-ignored parameters /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Pipeline', 'PipelineColorBlendStateCreateInfo',+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',+-- 'PipelineDepthStencilStateCreateInfo', 'PipelineDynamicStateCreateInfo',+-- 'PipelineInputAssemblyStateCreateInfo',+-- 'Vulkan.Core10.Handles.PipelineLayout',+-- 'PipelineMultisampleStateCreateInfo',+-- 'PipelineRasterizationStateCreateInfo', 'PipelineShaderStageCreateInfo',+-- 'PipelineTessellationStateCreateInfo',+-- 'PipelineVertexInputStateCreateInfo', 'PipelineViewportStateCreateInfo',+-- 'Vulkan.Core10.Handles.RenderPass',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'createGraphicsPipelines'+data GraphicsPipelineCreateInfo (es :: [Type]) = GraphicsPipelineCreateInfo+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is a bitmask of+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'+    -- specifying how the pipeline will be generated.+    flags :: PipelineCreateFlags+  , -- | @pStages@ is a pointer to an array of @stageCount@+    -- 'PipelineShaderStageCreateInfo' structures describing the set of the+    -- shader stages to be included in the graphics pipeline.+    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)+  , -- | @pVertexInputState@ is a pointer to a+    -- 'PipelineVertexInputStateCreateInfo' structure. It is ignored if the+    -- pipeline includes a mesh shader stage.+    vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)+  , -- | @pInputAssemblyState@ is a pointer to a+    -- 'PipelineInputAssemblyStateCreateInfo' structure which determines input+    -- assembly behavior, as described in+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing Drawing Commands>.+    -- It is ignored if the pipeline includes a mesh shader stage.+    inputAssemblyState :: Maybe PipelineInputAssemblyStateCreateInfo+  , -- | @pTessellationState@ is a pointer to a+    -- 'PipelineTessellationStateCreateInfo' structure, and is ignored if the+    -- pipeline does not include a tessellation control shader stage and+    -- tessellation evaluation shader stage.+    tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)+  , -- | @pViewportState@ is a pointer to a 'PipelineViewportStateCreateInfo'+    -- structure, and is ignored if the pipeline has rasterization disabled.+    viewportState :: Maybe (SomeStruct PipelineViewportStateCreateInfo)+  , -- | @pRasterizationState@ is a pointer to a+    -- 'PipelineRasterizationStateCreateInfo' structure.+    rasterizationState :: SomeStruct PipelineRasterizationStateCreateInfo+  , -- | @pMultisampleState@ is a pointer to a+    -- 'PipelineMultisampleStateCreateInfo' structure, and is ignored if the+    -- pipeline has rasterization disabled.+    multisampleState :: Maybe (SomeStruct PipelineMultisampleStateCreateInfo)+  , -- | @pDepthStencilState@ is a pointer to a+    -- 'PipelineDepthStencilStateCreateInfo' structure, and is ignored if the+    -- pipeline has rasterization disabled or if the subpass of the render pass+    -- the pipeline is created against does not use a depth\/stencil+    -- attachment.+    depthStencilState :: Maybe PipelineDepthStencilStateCreateInfo+  , -- | @pColorBlendState@ is a pointer to a 'PipelineColorBlendStateCreateInfo'+    -- structure, and is ignored if the pipeline has rasterization disabled or+    -- if the subpass of the render pass the pipeline is created against does+    -- not use any color attachments.+    colorBlendState :: Maybe (SomeStruct PipelineColorBlendStateCreateInfo)+  , -- | @pDynamicState@ is a pointer to a 'PipelineDynamicStateCreateInfo'+    -- structure, and is used to indicate which properties of the pipeline+    -- state object are dynamic and /can/ be changed independently of the+    -- pipeline state. This /can/ be @NULL@, which means no state in the+    -- pipeline is considered dynamic.+    dynamicState :: Maybe PipelineDynamicStateCreateInfo+  , -- | @layout@ is the description of binding locations used by both the+    -- pipeline and descriptor sets used with the pipeline.+    layout :: PipelineLayout+  , -- | @renderPass@ is a handle to a render pass object describing the+    -- environment in which the pipeline will be used; the pipeline /must/ only+    -- be used with an instance of any render pass compatible with the one+    -- provided. See+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility Render Pass Compatibility>+    -- for more information.+    renderPass :: RenderPass+  , -- | @subpass@ is the index of the subpass in the render pass where this+    -- pipeline will be used.+    subpass :: Word32+  , -- | @basePipelineHandle@ is a pipeline to derive from.+    basePipelineHandle :: Pipeline+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use+    -- as a pipeline to derive from.+    basePipelineIndex :: Int32+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (GraphicsPipelineCreateInfo (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (GraphicsPipelineCreateInfo es)++instance Extensible GraphicsPipelineCreateInfo where+  extensibleType = STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO+  setNext x next = x{next = next}+  getNext GraphicsPipelineCreateInfo{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends GraphicsPipelineCreateInfo e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @PipelineFragmentShadingRateEnumStateCreateInfoNV = Just f     | Just Refl <- eqT @e @PipelineFragmentShadingRateStateCreateInfoKHR = Just f     | Just Refl <- eqT @e @PipelineCompilerControlCreateInfoAMD = Just f     | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f
src/Vulkan/Core10/PipelineCache.hs view
@@ -120,16 +120,19 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreatePipelineCache-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'PipelineCacheCreateInfo' structure+-- -   #VUID-vkCreatePipelineCache-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'PipelineCacheCreateInfo'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreatePipelineCache-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pPipelineCache@ /must/ be a valid pointer to a+-- -   #VUID-vkCreatePipelineCache-pPipelineCache-parameter#+--     @pPipelineCache@ /must/ be a valid pointer to a --     'Vulkan.Core10.Handles.PipelineCache' handle -- -- == Return Codes@@ -201,27 +204,32 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyPipelineCache-pipelineCache-00771# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @pipelineCache@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyPipelineCache-pipelineCache-00772# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @pipelineCache@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyPipelineCache-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkDestroyPipelineCache-pipelineCache-parameter# If+--     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @pipelineCache@ /must/ be a valid --     'Vulkan.Core10.Handles.PipelineCache' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyPipelineCache-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @pipelineCache@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkDestroyPipelineCache-pipelineCache-parent# If+--     @pipelineCache@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -332,19 +340,22 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetPipelineCacheData-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pipelineCache@ /must/ be a valid+-- -   #VUID-vkGetPipelineCacheData-pipelineCache-parameter#+--     @pipelineCache@ /must/ be a valid --     'Vulkan.Core10.Handles.PipelineCache' handle ----- -   @pDataSize@ /must/ be a valid pointer to a @size_t@ value+-- -   #VUID-vkGetPipelineCacheData-pDataSize-parameter# @pDataSize@ /must/+--     be a valid pointer to a @size_t@ value ----- -   If the value referenced by @pDataSize@ is not @0@, and @pData@ is---     not @NULL@, @pData@ /must/ be a valid pointer to an array of---     @pDataSize@ bytes+-- -   #VUID-vkGetPipelineCacheData-pData-parameter# If the value+--     referenced by @pDataSize@ is not @0@, and @pData@ is not @NULL@,+--     @pData@ /must/ be a valid pointer to an array of @pDataSize@ bytes ----- -   @pipelineCache@ /must/ have been created, allocated, or retrieved---     from @device@+-- -   #VUID-vkGetPipelineCacheData-pipelineCache-parent# @pipelineCache@+--     /must/ have been created, allocated, or retrieved from @device@ -- -- == Return Codes --@@ -407,25 +418,30 @@ -- -- == Valid Usage ----- -   @dstCache@ /must/ not appear in the list of source caches+-- -   #VUID-vkMergePipelineCaches-dstCache-00770# @dstCache@ /must/ not+--     appear in the list of source caches -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkMergePipelineCaches-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @dstCache@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineCache'---     handle+-- -   #VUID-vkMergePipelineCaches-dstCache-parameter# @dstCache@ /must/ be+--     a valid 'Vulkan.Core10.Handles.PipelineCache' handle ----- -   @pSrcCaches@ /must/ be a valid pointer to an array of---     @srcCacheCount@ valid 'Vulkan.Core10.Handles.PipelineCache' handles+-- -   #VUID-vkMergePipelineCaches-pSrcCaches-parameter# @pSrcCaches@+--     /must/ be a valid pointer to an array of @srcCacheCount@ valid+--     'Vulkan.Core10.Handles.PipelineCache' handles ----- -   @srcCacheCount@ /must/ be greater than @0@+-- -   #VUID-vkMergePipelineCaches-srcCacheCount-arraylength#+--     @srcCacheCount@ /must/ be greater than @0@ ----- -   @dstCache@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkMergePipelineCaches-dstCache-parent# @dstCache@ /must/ have+--     been created, allocated, or retrieved from @device@ ----- -   Each element of @pSrcCaches@ /must/ have been created, allocated, or---     retrieved from @device@+-- -   #VUID-vkMergePipelineCaches-pSrcCaches-parent# Each element of+--     @pSrcCaches@ /must/ have been created, allocated, or retrieved from+--     @device@ -- -- == Host Synchronization --@@ -473,30 +489,36 @@ -- -- == Valid Usage ----- -   If @initialDataSize@ is not @0@, it /must/ be equal to the size of+-- -   #VUID-VkPipelineCacheCreateInfo-initialDataSize-00768# If+--     @initialDataSize@ is not @0@, it /must/ be equal to the size of --     @pInitialData@, as returned by 'getPipelineCacheData' when --     @pInitialData@ was originally retrieved ----- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ have been+-- -   #VUID-VkPipelineCacheCreateInfo-initialDataSize-00769# If+--     @initialDataSize@ is not @0@, @pInitialData@ /must/ have been --     retrieved from a previous call to 'getPipelineCacheData' ----- -   If the+-- -   #VUID-VkPipelineCacheCreateInfo-pipelineCreationCacheControl-02892#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl> --     feature is not enabled, @flags@ /must/ not include --     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineCacheCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkPipelineCacheCreateInfo-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkPipelineCacheCreateInfo-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PipelineCacheCreateFlagBits' --     values ----- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ be a valid+-- -   #VUID-VkPipelineCacheCreateInfo-pInitialData-parameter# If+--     @initialDataSize@ is not @0@, @pInitialData@ /must/ be a valid --     pointer to an array of @initialDataSize@ bytes -- -- = See Also
src/Vulkan/Core10/PipelineLayout.hs view
@@ -74,16 +74,19 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreatePipelineLayout-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'PipelineLayoutCreateInfo' structure+-- -   #VUID-vkCreatePipelineLayout-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'PipelineLayoutCreateInfo'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreatePipelineLayout-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pPipelineLayout@ /must/ be a valid pointer to a+-- -   #VUID-vkCreatePipelineLayout-pPipelineLayout-parameter#+--     @pPipelineLayout@ /must/ be a valid pointer to a --     'Vulkan.Core10.Handles.PipelineLayout' handle -- -- == Return Codes@@ -155,32 +158,38 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyPipelineLayout-pipelineLayout-00299# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @pipelineLayout@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyPipelineLayout-pipelineLayout-00300# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @pipelineLayout@ was created, @pAllocator@ /must/ be --     @NULL@ ----- -   @pipelineLayout@ /must/ not have been passed to any @vkCmd*@ command---     for any command buffers that are still in the+-- -   #VUID-vkDestroyPipelineLayout-pipelineLayout-02004# @pipelineLayout@+--     /must/ not have been passed to any @vkCmd*@ command for any command+--     buffers that are still in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> --     when 'destroyPipelineLayout' is called -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyPipelineLayout-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @pipelineLayout@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkDestroyPipelineLayout-pipelineLayout-parameter# If+--     @pipelineLayout@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @pipelineLayout@ /must/ be a valid --     'Vulkan.Core10.Handles.PipelineLayout' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyPipelineLayout-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @pipelineLayout@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkDestroyPipelineLayout-pipelineLayout-parent# If+--     @pipelineLayout@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -229,26 +238,30 @@     -- constants from the corresponding shader stage will return undefined     -- values.     ---    -- @stageFlags@ /must/ be a valid combination of+    -- #VUID-VkPushConstantRange-stageFlags-parameter# @stageFlags@ /must/ be a+    -- valid combination of     -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values     ---    -- @stageFlags@ /must/ not be @0@+    -- #VUID-VkPushConstantRange-stageFlags-requiredbitmask# @stageFlags@+    -- /must/ not be @0@     stageFlags :: ShaderStageFlags   , -- | @offset@ and @size@ are the start offset and size, respectively,     -- consumed by the range. Both @offset@ and @size@ are in units of bytes     -- and /must/ be a multiple of 4. The layout of the push constant variables     -- is specified in the shader.     ---    -- @offset@ /must/ be less than+    -- #VUID-VkPushConstantRange-offset-00294# @offset@ /must/ be less than     -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@     ---    -- @offset@ /must/ be a multiple of @4@+    -- #VUID-VkPushConstantRange-offset-00295# @offset@ /must/ be a multiple of+    -- @4@     offset :: Word32-  , -- | @size@ /must/ be greater than @0@+  , -- | #VUID-VkPushConstantRange-size-00296# @size@ /must/ be greater than @0@     ---    -- @size@ /must/ be a multiple of @4@+    -- #VUID-VkPushConstantRange-size-00297# @size@ /must/ be a multiple of @4@     ---    -- @size@ /must/ be less than or equal to+    -- #VUID-VkPushConstantRange-size-00298# @size@ /must/ be less than or+    -- equal to     -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@     -- minus @offset@     size :: Word32@@ -300,11 +313,12 @@ -- -- == Valid Usage ----- -   @setLayoutCount@ /must/ be less than or equal to+-- -   #VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286#+--     @setLayoutCount@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxBoundDescriptorSets@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03016# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and@@ -313,8 +327,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorSamplers@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03017# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'@@ -324,8 +338,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorUniformBuffers@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03018# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'@@ -335,8 +349,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorStorageBuffers@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03019# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',@@ -347,8 +361,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorSampledImages@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03020# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',@@ -358,8 +372,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorStorageImages@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03021# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'@@ -367,8 +381,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageDescriptorInputAttachments@ ----- -   The total number of bindings in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-02214# The total+--     number of bindings in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'@@ -376,14 +390,16 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxPerStageDescriptorInlineUniformBlocks@ ----- -   The total number of descriptors with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03022# The total+--     number of descriptors with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER' --     accessible to any given shader stage across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindSamplers@ ----- -   The total number of descriptors with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03023# The total+--     number of descriptors with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' --     and --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'@@ -391,7 +407,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindUniformBuffers@ ----- -   The total number of descriptors with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03024# The total+--     number of descriptors with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' --     and --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'@@ -399,7 +416,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindStorageBuffers@ ----- -   The total number of descriptors with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03025# The total+--     number of descriptors with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', --     and@@ -408,7 +426,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindSampledImages@ ----- -   The total number of descriptors with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03026# The total+--     number of descriptors with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', --     and --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'@@ -416,20 +435,22 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindStorageImages@ ----- -   The total number of descriptors with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03027# The total+--     number of descriptors with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT' --     accessible to any given shader stage across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxPerStageDescriptorUpdateAfterBindInputAttachments@ ----- -   The total number of bindings with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-02215# The total+--     number of bindings with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' --     accessible to any given shader stage across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03028# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and@@ -438,8 +459,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetSamplers@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03029# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'@@ -447,8 +468,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetUniformBuffers@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03030# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'@@ -456,8 +477,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetUniformBuffersDynamic@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03031# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'@@ -465,8 +486,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageBuffers@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03032# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'@@ -474,8 +495,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageBuffersDynamic@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03033# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',@@ -486,8 +507,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetSampledImages@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03034# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',@@ -497,8 +518,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetStorageImages@ ----- -   The total number of descriptors in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-03035# The total+--     number of descriptors in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'@@ -506,8 +527,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDescriptorSetInputAttachments@ ----- -   The total number of bindings in descriptor set layouts created---     without the+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-02216# The total+--     number of bindings in descriptor set layouts created without the --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT' --     bit set with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'@@ -515,38 +536,44 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxDescriptorSetInlineUniformBlocks@ ----- -   The total number of descriptors of the type+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03036# The total number+--     of descriptors of the type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER' and --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER' --     accessible across all shader stages and across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindSamplers@ ----- -   The total number of descriptors of the type+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03037# The total number+--     of descriptors of the type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' --     accessible across all shader stages and across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindUniformBuffers@ ----- -   The total number of descriptors of the type+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03038# The total number+--     of descriptors of the type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC' --     accessible across all shader stages and across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ ----- -   The total number of descriptors of the type+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03039# The total number+--     of descriptors of the type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' --     accessible across all shader stages and across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageBuffers@ ----- -   The total number of descriptors of the type+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03040# The total number+--     of descriptors of the type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC' --     accessible across all shader stages and across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ ----- -   The total number of descriptors of the type+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03041# The total number+--     of descriptors of the type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', --     and@@ -555,7 +582,8 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindSampledImages@ ----- -   The total number of descriptors of the type+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03042# The total number+--     of descriptors of the type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', --     and --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'@@ -563,34 +591,39 @@ --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindStorageImages@ ----- -   The total number of descriptors of the type+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-03043# The total number+--     of descriptors of the type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT' --     accessible across all shader stages and across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingProperties'::@maxDescriptorSetUpdateAfterBindInputAttachments@ ----- -   The total number of bindings with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-02217# The total+--     number of bindings with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' --     accessible across all shader stages and across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT'::@maxDescriptorSetUpdateAfterBindInlineUniformBlocks@ ----- -   Any two elements of @pPushConstantRanges@ /must/ not include the---     same stage in @stageFlags@+-- -   #VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292# Any two+--     elements of @pPushConstantRanges@ /must/ not include the same stage+--     in @stageFlags@ ----- -   @pSetLayouts@ /must/ not contain more than one descriptor set layout---     that was created with+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00293# @pSetLayouts@+--     /must/ not contain more than one descriptor set layout that was+--     created with --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR' --     set ----- -   The total number of bindings with a @descriptorType@ of+-- -   #VUID-VkPipelineLayoutCreateInfo-descriptorType-02381# The total+--     number of bindings with a @descriptorType@ of --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR' --     accessible across all shader stages and across all elements of --     @pSetLayouts@ /must/ be less than or equal to --     'Vulkan.Extensions.VK_KHR_ray_tracing.PhysicalDeviceRayTracingPropertiesKHR'::@maxDescriptorSetAccelerationStructures@ ----- -   The total number of @pImmutableSamplers@ created with @flags@---     containing+-- -   #VUID-VkPipelineLayoutCreateInfo-pImmutableSamplers-03566# The total+--     number of @pImmutableSamplers@ created with @flags@ containing --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT' --     or --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT'@@ -600,19 +633,23 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineLayoutCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkPipelineLayoutCreateInfo-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkPipelineLayoutCreateInfo-flags-zerobitmask# @flags@ /must/+--     be @0@ ----- -   If @setLayoutCount@ is not @0@, @pSetLayouts@ /must/ be a valid---     pointer to an array of @setLayoutCount@ valid+-- -   #VUID-VkPipelineLayoutCreateInfo-pSetLayouts-parameter# If+--     @setLayoutCount@ is not @0@, @pSetLayouts@ /must/ be a valid pointer+--     to an array of @setLayoutCount@ valid --     'Vulkan.Core10.Handles.DescriptorSetLayout' handles ----- -   If @pushConstantRangeCount@ is not @0@, @pPushConstantRanges@ /must/---     be a valid pointer to an array of @pushConstantRangeCount@ valid+-- -   #VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-parameter# If+--     @pushConstantRangeCount@ is not @0@, @pPushConstantRanges@ /must/ be+--     a valid pointer to an array of @pushConstantRangeCount@ valid --     'PushConstantRange' structures -- -- = See Also
src/Vulkan/Core10/Query.hs view
@@ -102,17 +102,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateQueryPool-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'QueryPoolCreateInfo' structure+-- -   #VUID-vkCreateQueryPool-pCreateInfo-parameter# @pCreateInfo@ /must/+--     be a valid pointer to a valid 'QueryPoolCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateQueryPool-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pQueryPool@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.QueryPool' handle+-- -   #VUID-vkCreateQueryPool-pQueryPool-parameter# @pQueryPool@ /must/ be+--     a valid pointer to a 'Vulkan.Core10.Handles.QueryPool' handle -- -- == Return Codes --@@ -183,30 +184,34 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @queryPool@ /must/ have---     completed execution+-- -   #VUID-vkDestroyQueryPool-queryPool-00793# All submitted commands+--     that refer to @queryPool@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyQueryPool-queryPool-00794# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @queryPool@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyQueryPool-queryPool-00795# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @queryPool@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyQueryPool-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @queryPool@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle+-- -   #VUID-vkDestroyQueryPool-queryPool-parameter# If @queryPool@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @queryPool@ /must/ be a+--     valid 'Vulkan.Core10.Handles.QueryPool' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyQueryPool-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @queryPool@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyQueryPool-queryPool-parent# If @queryPool@ is a valid+--     handle, it /must/ have been created, allocated, or retrieved from+--     @device@ -- -- == Host Synchronization --@@ -346,54 +351,62 @@ -- -- == Valid Usage ----- -   @firstQuery@ /must/ be less than the number of queries in---     @queryPool@+-- -   #VUID-vkGetQueryPoolResults-firstQuery-00813# @firstQuery@ /must/ be+--     less than the number of queries in @queryPool@ ----- -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is---     not set in @flags@, then @pData@ and @stride@ /must/ be multiples of---     @4@+-- -   #VUID-vkGetQueryPoolResults-flags-02827# If+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is not+--     set in @flags@, then @pData@ and @stride@ /must/ be multiples of @4@ ----- -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is---     not set in @flags@ and the @queryType@ used to create @queryPool@---     was not+-- -   #VUID-vkGetQueryPoolResults-flags-02828# If+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is not+--     set in @flags@ and the @queryType@ used to create @queryPool@ was+--     not --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', --     then @pData@ and @stride@ /must/ be multiples of @4@ ----- -   If 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is---     set in @flags@ then @pData@ and @stride@ /must/ be multiples of @8@+-- -   #VUID-vkGetQueryPoolResults-flags-00815# If+--     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' is set+--     in @flags@ then @pData@ and @stride@ /must/ be multiples of @8@ ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkGetQueryPoolResults-queryType-03229# If the @queryType@ used+--     to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', --     then @pData@ and @stride@ /must/ be multiples of the size of --     'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterResultKHR' ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkGetQueryPoolResults-queryType-04519# If the @queryType@ used+--     to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', --     then @stride@ /must/ be large enough to contain --     'Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR'::@counterIndexCount@ --     used to create @queryPool@ times the size of --     'Vulkan.Extensions.VK_KHR_performance_query.PerformanceCounterResultKHR'. ----- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or---     equal to the number of queries in @queryPool@+-- -   #VUID-vkGetQueryPoolResults-firstQuery-00816# The sum of+--     @firstQuery@ and @queryCount@ /must/ be less than or equal to the+--     number of queries in @queryPool@ ----- -   @dataSize@ /must/ be large enough to contain the result of each---     query, as described+-- -   #VUID-vkGetQueryPoolResults-dataSize-00817# @dataSize@ /must/ be+--     large enough to contain the result of each query, as described --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-memorylayout here> ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkGetQueryPoolResults-queryType-00818# If the @queryType@ used+--     to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP', @flags@ /must/ --     not contain --     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT' ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkGetQueryPoolResults-queryType-03230# If the @queryType@ used+--     to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', --     @flags@ /must/ not contain --     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_WITH_AVAILABILITY_BIT', --     'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_PARTIAL_BIT' --     or 'Vulkan.Core10.Enums.QueryResultFlagBits.QUERY_RESULT_64_BIT' ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkGetQueryPoolResults-queryType-03231# If the @queryType@ used+--     to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', --     the @queryPool@ /must/ have been recorded once for each pass as --     retrieved via a call to@@ -401,20 +414,24 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetQueryPoolResults-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle+-- -   #VUID-vkGetQueryPoolResults-queryPool-parameter# @queryPool@ /must/+--     be a valid 'Vulkan.Core10.Handles.QueryPool' handle ----- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes+-- -   #VUID-vkGetQueryPoolResults-pData-parameter# @pData@ /must/ be a+--     valid pointer to an array of @dataSize@ bytes ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-vkGetQueryPoolResults-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.QueryResultFlagBits.QueryResultFlagBits' values ----- -   @dataSize@ /must/ be greater than @0@+-- -   #VUID-vkGetQueryPoolResults-dataSize-arraylength# @dataSize@ /must/+--     be greater than @0@ ----- -   @queryPool@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkGetQueryPoolResults-queryPool-parent# @queryPool@ /must/+--     have been created, allocated, or retrieved from @device@ -- -- == Return Codes --@@ -482,43 +499,44 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkQueryPoolCreateInfo-queryType-00791# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineStatisticsQuery pipeline statistics queries> --     feature is not enabled, @queryType@ /must/ not be --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' ----- -   If @queryType@ is+-- -   #VUID-VkQueryPoolCreateInfo-queryType-00792# If @queryType@ is --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS', --     @pipelineStatistics@ /must/ be a valid combination of --     'Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits.QueryPipelineStatisticFlagBits' --     values ----- -   If @queryType@ is+-- -   #VUID-VkQueryPoolCreateInfo-queryType-03222# If @queryType@ is --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', --     the @pNext@ chain /must/ include a structure of type --     'Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR' ----- -   @queryCount@ /must/ be greater than 0+-- -   #VUID-VkQueryPoolCreateInfo-queryCount-02763# @queryCount@ /must/ be+--     greater than 0 -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkQueryPoolCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUERY_POOL_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+-- -   #VUID-VkQueryPoolCreateInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_KHR_performance_query.QueryPoolPerformanceCreateInfoKHR' --     or --     'Vulkan.Extensions.VK_INTEL_performance_query.QueryPoolPerformanceQueryCreateInfoINTEL' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkQueryPoolCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkQueryPoolCreateInfo-flags-zerobitmask# @flags@ /must/ be @0@ ----- -   @queryType@ /must/ be a valid---     'Vulkan.Core10.Enums.QueryType.QueryType' value+-- -   #VUID-VkQueryPoolCreateInfo-queryType-parameter# @queryType@ /must/+--     be a valid 'Vulkan.Core10.Enums.QueryType.QueryType' value -- -- = See Also --
src/Vulkan/Core10/Queue.hs view
@@ -111,24 +111,27 @@ -- -- == Valid Usage ----- -   @queueFamilyIndex@ /must/ be one of the queue family indices---     specified when @device@ was created, via the---     'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure+-- -   #VUID-vkGetDeviceQueue-queueFamilyIndex-00384# @queueFamilyIndex@+--     /must/ be one of the queue family indices specified when @device@+--     was created, via the 'Vulkan.Core10.Device.DeviceQueueCreateInfo'+--     structure ----- -   @queueIndex@ /must/ be less than the number of queues created for---     the specified queue family index when @device@ was created, via the---     @queueCount@ member of the+-- -   #VUID-vkGetDeviceQueue-queueIndex-00385# @queueIndex@ /must/ be less+--     than the number of queues created for the specified queue family+--     index when @device@ was created, via the @queueCount@ member of the --     'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure ----- -   'Vulkan.Core10.Device.DeviceQueueCreateInfo'::@flags@ /must/ have+-- -   #VUID-vkGetDeviceQueue-flags-01841#+--     'Vulkan.Core10.Device.DeviceQueueCreateInfo'::@flags@ /must/ have --     been set to zero when @device@ was created -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetDeviceQueue-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pQueue@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Queue' handle+-- -   #VUID-vkGetDeviceQueue-pQueue-parameter# @pQueue@ /must/ be a valid+--     pointer to a 'Vulkan.Core10.Handles.Queue' handle -- -- = See Also --@@ -226,14 +229,17 @@ -- -- == Valid Usage ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ be unsignaled+-- -   #VUID-vkQueueSubmit-fence-00063# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be+--     unsignaled ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ not be associated with any other queue command that has not---     yet completed execution on that queue+-- -   #VUID-vkQueueSubmit-fence-00064# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ not be+--     associated with any other queue command that has not yet completed+--     execution on that queue ----- -   Any calls to 'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent',+-- -   #VUID-vkQueueSubmit-pCommandBuffers-00065# Any calls to+--     'Vulkan.Core10.CommandBufferBuilding.cmdSetEvent', --     'Vulkan.Core10.CommandBufferBuilding.cmdResetEvent' or --     'Vulkan.Core10.CommandBufferBuilding.cmdWaitEvents' that have been --     recorded into any of the command buffer elements of the@@ -242,45 +248,50 @@ --     any of those commands in a command buffer that has been submitted to --     another queue and is still in the /pending state/ ----- -   Any stage flag included in any element of the @pWaitDstStageMask@---     member of any element of @pSubmits@ /must/ be a pipeline stage---     supported by one of the capabilities of @queue@, as specified in the+-- -   #VUID-vkQueueSubmit-pWaitDstStageMask-00066# Any stage flag included+--     in any element of the @pWaitDstStageMask@ member of any element of+--     @pSubmits@ /must/ be a pipeline stage supported by one of the+--     capabilities of @queue@, as specified in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported table of supported pipeline stages> ----- -   Each element of the @pSignalSemaphores@ member of any element of---     @pSubmits@ /must/ be unsignaled when the semaphore signal operation---     it defines is executed on the device+-- -   #VUID-vkQueueSubmit-pSignalSemaphores-00067# Each element of the+--     @pSignalSemaphores@ member of any element of @pSubmits@ /must/ be+--     unsignaled when the semaphore signal operation it defines is+--     executed on the device ----- -   When a semaphore wait operation referring to a binary semaphore---     defined by any element of the @pWaitSemaphores@ member of any---     element of @pSubmits@ executes on @queue@, there /must/ be no other---     queues waiting on the same semaphore+-- -   #VUID-vkQueueSubmit-pWaitSemaphores-00068# When a semaphore wait+--     operation referring to a binary semaphore defined by any element of+--     the @pWaitSemaphores@ member of any element of @pSubmits@ executes+--     on @queue@, there /must/ be no other queues waiting on the same+--     semaphore ----- -   All elements of the @pWaitSemaphores@ member of all elements of---     @pSubmits@ created with a---     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of+-- -   #VUID-vkQueueSubmit-pWaitSemaphores-03238# All elements of the+--     @pWaitSemaphores@ member of all elements of @pSubmits@ created with+--     a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' /must/ --     reference a semaphore signal operation that has been submitted for --     execution and any semaphore signal operations on which it depends --     (if any) /must/ have also been submitted for execution ----- -   Each element of the @pCommandBuffers@ member of each element of---     @pSubmits@ /must/ be in the+-- -   #VUID-vkQueueSubmit-pCommandBuffers-00070# Each element of the+--     @pCommandBuffers@ member of each element of @pSubmits@ /must/ be in+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state> ----- -   If any element of the @pCommandBuffers@ member of any element of---     @pSubmits@ was not recorded with the+-- -   #VUID-vkQueueSubmit-pCommandBuffers-00071# If any element of the+--     @pCommandBuffers@ member of any element of @pSubmits@ was not+--     recorded with the --     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT', --     it /must/ not be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state> ----- -   Any+-- -   #VUID-vkQueueSubmit-pCommandBuffers-00072# Any --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-secondary secondary command buffers recorded> --     into any element of the @pCommandBuffers@ member of any element of --     @pSubmits@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending or executable state> ----- -   If any+-- -   #VUID-vkQueueSubmit-pCommandBuffers-00073# If any --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-secondary secondary command buffers recorded> --     into any element of the @pCommandBuffers@ member of any element of --     @pSubmits@ was not recorded with the@@ -288,12 +299,13 @@ --     it /must/ not be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state> ----- -   Each element of the @pCommandBuffers@ member of each element of---     @pSubmits@ /must/ have been allocated from a---     'Vulkan.Core10.Handles.CommandPool' that was created for the same---     queue family @queue@ belongs to+-- -   #VUID-vkQueueSubmit-pCommandBuffers-00074# Each element of the+--     @pCommandBuffers@ member of each element of @pSubmits@ /must/ have+--     been allocated from a 'Vulkan.Core10.Handles.CommandPool' that was+--     created for the same queue family @queue@ belongs to ----- -   If any element of @pSubmits->pCommandBuffers@ includes a+-- -   #VUID-vkQueueSubmit-pSubmits-02207# If any element of+--     @pSubmits->pCommandBuffers@ includes a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire Queue Family Transfer Acquire Operation>, --     there /must/ exist a previously submitted --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-release Queue Family Transfer Release Operation>@@ -303,7 +315,8 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-queue-transfers-acquire acquire operations>, --     and which happens-before the acquire operation ----- -   If a command recorded into any element of @pCommandBuffers@ was a+-- -   #VUID-vkQueueSubmit-pCommandBuffers-03220# If a command recorded+--     into any element of @pCommandBuffers@ was a --     'Vulkan.Core10.CommandBufferBuilding.cmdBeginQuery' whose --     @queryPool@ was created with a @queryType@ of --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR',@@ -313,7 +326,7 @@ --     'Vulkan.Core10.Handles.Device' that @queue@ was retrieved from, --     throughout recording of those command buffers ----- -   Any resource created with+-- -   #VUID-vkQueueSubmit-pSubmits-02808# Any resource created with --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_EXCLUSIVE' that is --     read by an operation specified by @pSubmits@ /must/ not be owned by --     any queue family other than the one which @queue@ belongs to, at the@@ -321,17 +334,21 @@ -- -- == Valid Usage (Implicit) ----- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+-- -   #VUID-vkQueueSubmit-queue-parameter# @queue@ /must/ be a valid+--     'Vulkan.Core10.Handles.Queue' handle ----- -   If @submitCount@ is not @0@, @pSubmits@ /must/ be a valid pointer to---     an array of @submitCount@ valid 'SubmitInfo' structures+-- -   #VUID-vkQueueSubmit-pSubmits-parameter# If @submitCount@ is not @0@,+--     @pSubmits@ /must/ be a valid pointer to an array of @submitCount@+--     valid 'SubmitInfo' structures ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-vkQueueSubmit-fence-parameter# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be a valid+--     'Vulkan.Core10.Handles.Fence' handle ----- -   Both of @fence@, and @queue@ that are valid handles of non-ignored---     parameters /must/ have been created, allocated, or retrieved from---     the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkQueueSubmit-commonparent# Both of @fence@, and @queue@ that+--     are valid handles of non-ignored parameters /must/ have been+--     created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -427,7 +444,8 @@ -- -- == Valid Usage (Implicit) ----- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+-- -   #VUID-vkQueueWaitIdle-queue-parameter# @queue@ /must/ be a valid+--     'Vulkan.Core10.Handles.Queue' handle -- -- == Host Synchronization --@@ -512,7 +530,8 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDeviceWaitIdle-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle -- -- == Host Synchronization --@@ -567,17 +586,17 @@ -- -- == Valid Usage ----- -   Each element of @pCommandBuffers@ /must/ not have been allocated---     with+-- -   #VUID-VkSubmitInfo-pCommandBuffers-00075# Each element of+--     @pCommandBuffers@ /must/ not have been allocated with --     'Vulkan.Core10.Enums.CommandBufferLevel.COMMAND_BUFFER_LEVEL_SECONDARY' ----- -   If the+-- -   #VUID-VkSubmitInfo-pWaitDstStageMask-00076# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders> --     feature is not enabled, each element of @pWaitDstStageMask@ /must/ --     not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT' ----- -   If the+-- -   #VUID-VkSubmitInfo-pWaitDstStageMask-00077# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders> --     feature is not enabled, each element of @pWaitDstStageMask@ /must/ --     not contain@@ -585,17 +604,20 @@ --     or --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' ----- -   Each element of @pWaitDstStageMask@ /must/ not include+-- -   #VUID-VkSubmitInfo-pWaitDstStageMask-00078# Each element of+--     @pWaitDstStageMask@ /must/ not include --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_HOST_BIT' ----- -   If any element of @pWaitSemaphores@ or @pSignalSemaphores@ was---     created with a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of+-- -   #VUID-VkSubmitInfo-pWaitSemaphores-03239# If any element of+--     @pWaitSemaphores@ or @pSignalSemaphores@ was created with a+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE', then --     the @pNext@ chain /must/ include a --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo' --     structure ----- -   If the @pNext@ chain of this structure includes a+-- -   #VUID-VkSubmitInfo-pNext-03240# If the @pNext@ chain of this+--     structure includes a --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo' --     structure and any element of @pWaitSemaphores@ was created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of@@ -603,7 +625,8 @@ --     its @waitSemaphoreValueCount@ member /must/ equal --     @waitSemaphoreCount@ ----- -   If the @pNext@ chain of this structure includes a+-- -   #VUID-VkSubmitInfo-pNext-03241# If the @pNext@ chain of this+--     structure includes a --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo' --     structure and any element of @pSignalSemaphores@ was created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of@@ -611,7 +634,8 @@ --     its @signalSemaphoreValueCount@ member /must/ equal --     @signalSemaphoreCount@ ----- -   For each element of @pSignalSemaphores@ created with a+-- -   #VUID-VkSubmitInfo-pSignalSemaphores-03242# For each element of+--     @pSignalSemaphores@ created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the --     corresponding element of@@ -621,7 +645,8 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation> --     is executed ----- -   For each element of @pWaitSemaphores@ created with a+-- -   #VUID-VkSubmitInfo-pWaitSemaphores-03243# For each element of+--     @pWaitSemaphores@ created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the --     corresponding element of@@ -631,7 +656,8 @@ --     signal operation on that semaphore by more than --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference> ----- -   For each element of @pSignalSemaphores@ created with a+-- -   #VUID-VkSubmitInfo-pSignalSemaphores-03244# For each element of+--     @pSignalSemaphores@ created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the --     corresponding element of@@ -641,25 +667,27 @@ --     signal operation on that semaphore by more than --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference> ----- -   If the+-- -   #VUID-VkSubmitInfo-pWaitDstStageMask-02089# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders> --     feature is not enabled, each element of @pWaitDstStageMask@ /must/ --     not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV' ----- -   If the+-- -   #VUID-VkSubmitInfo-pWaitDstStageMask-02090# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders> --     feature is not enabled, each element of @pWaitDstStageMask@ /must/ --     not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV' ----- -   If the @pNext@ chain of this structure does not include a+-- -   #VUID-VkSubmitInfo-pNext-04120# If the @pNext@ chain of this+--     structure does not include a --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo' --     structure with @protectedSubmit@ set to --     'Vulkan.Core10.FundamentalTypes.TRUE', then each element of the --     @pCommandBuffers@ array /must/ be an unprotected command buffer ----- -   If the @pNext@ chain of this structure includes a+-- -   #VUID-VkSubmitInfo-pNext-04148# If the @pNext@ chain of this+--     structure includes a --     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.ProtectedSubmitInfo' --     structure with @protectedSubmit@ set to --     'Vulkan.Core10.FundamentalTypes.TRUE', then each element of the@@ -667,12 +695,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSubmitInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBMIT_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+-- -   #VUID-VkSubmitInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_KHR_external_semaphore_win32.D3D12FenceSubmitInfoKHR', --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupSubmitInfo', --     'Vulkan.Extensions.VK_KHR_performance_query.PerformanceQuerySubmitInfoKHR',@@ -682,32 +710,38 @@ --     or --     'Vulkan.Extensions.VK_NV_win32_keyed_mutex.Win32KeyedMutexAcquireReleaseInfoNV' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkSubmitInfo-sType-unique# The @sType@ value of each struct in+--     the @pNext@ chain /must/ be unique ----- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a---     valid pointer to an array of @waitSemaphoreCount@ valid+-- -   #VUID-VkSubmitInfo-pWaitSemaphores-parameter# If+--     @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a valid+--     pointer to an array of @waitSemaphoreCount@ valid --     'Vulkan.Core10.Handles.Semaphore' handles ----- -   If @waitSemaphoreCount@ is not @0@, @pWaitDstStageMask@ /must/ be a+-- -   #VUID-VkSubmitInfo-pWaitDstStageMask-parameter# If+--     @waitSemaphoreCount@ is not @0@, @pWaitDstStageMask@ /must/ be a --     valid pointer to an array of @waitSemaphoreCount@ valid combinations --     of 'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' --     values ----- -   Each element of @pWaitDstStageMask@ /must/ not be @0@+-- -   #VUID-VkSubmitInfo-pWaitDstStageMask-requiredbitmask# Each element+--     of @pWaitDstStageMask@ /must/ not be @0@ ----- -   If @commandBufferCount@ is not @0@, @pCommandBuffers@ /must/ be a---     valid pointer to an array of @commandBufferCount@ valid+-- -   #VUID-VkSubmitInfo-pCommandBuffers-parameter# If+--     @commandBufferCount@ is not @0@, @pCommandBuffers@ /must/ be a valid+--     pointer to an array of @commandBufferCount@ valid --     'Vulkan.Core10.Handles.CommandBuffer' handles ----- -   If @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be---     a valid pointer to an array of @signalSemaphoreCount@ valid+-- -   #VUID-VkSubmitInfo-pSignalSemaphores-parameter# If+--     @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be a+--     valid pointer to an array of @signalSemaphoreCount@ valid --     'Vulkan.Core10.Handles.Semaphore' handles ----- -   Each of the elements of @pCommandBuffers@, the elements of---     @pSignalSemaphores@, and the elements of @pWaitSemaphores@ that are---     valid handles of non-ignored parameters /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkSubmitInfo-commonparent# Each of the elements of+--     @pCommandBuffers@, the elements of @pSignalSemaphores@, and the+--     elements of @pWaitSemaphores@ that are valid handles of non-ignored+--     parameters /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device' -- -- = See Also --
src/Vulkan/Core10/QueueSemaphore.hs view
@@ -81,17 +81,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateSemaphore-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'SemaphoreCreateInfo' structure+-- -   #VUID-vkCreateSemaphore-pCreateInfo-parameter# @pCreateInfo@ /must/+--     be a valid pointer to a valid 'SemaphoreCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateSemaphore-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSemaphore@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Semaphore' handle+-- -   #VUID-vkCreateSemaphore-pSemaphore-parameter# @pSemaphore@ /must/ be+--     a valid pointer to a 'Vulkan.Core10.Handles.Semaphore' handle -- -- == Return Codes --@@ -162,30 +163,34 @@ -- -- == Valid Usage ----- -   All submitted batches that refer to @semaphore@ /must/ have---     completed execution+-- -   #VUID-vkDestroySemaphore-semaphore-01137# All submitted batches that+--     refer to @semaphore@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroySemaphore-semaphore-01138# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @semaphore@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroySemaphore-semaphore-01139# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @semaphore@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroySemaphore-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'---     handle+-- -   #VUID-vkDestroySemaphore-semaphore-parameter# If @semaphore@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @semaphore@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Semaphore' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroySemaphore-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @semaphore@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroySemaphore-semaphore-parent# If @semaphore@ is a valid+--     handle, it /must/ have been created, allocated, or retrieved from+--     @device@ -- -- == Host Synchronization --@@ -223,21 +228,21 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSemaphoreCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_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+-- -   #VUID-VkSemaphoreCreateInfo-pNext-pNext# 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 --     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo', --     'Vulkan.Extensions.VK_KHR_external_semaphore_win32.ExportSemaphoreWin32HandleInfoKHR', --     or --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkSemaphoreCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkSemaphoreCreateInfo-flags-zerobitmask# @flags@ /must/ be @0@ -- -- = See Also --
src/Vulkan/Core10/Sampler.hs view
@@ -101,23 +101,25 @@ -- -- == Valid Usage ----- -   There /must/ be less than+-- -   #VUID-vkCreateSampler-maxSamplerAllocationCount-04110# There /must/+--     be less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSamplerAllocationCount@ --     VkSampler objects currently created on the device. -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateSampler-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'SamplerCreateInfo' structure+-- -   #VUID-vkCreateSampler-pCreateInfo-parameter# @pCreateInfo@ /must/ be+--     a valid pointer to a valid 'SamplerCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateSampler-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSampler@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Sampler' handle+-- -   #VUID-vkCreateSampler-pSampler-parameter# @pSampler@ /must/ be a+--     valid pointer to a 'Vulkan.Core10.Handles.Sampler' handle -- -- == Return Codes --@@ -188,29 +190,34 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @sampler@ /must/ have completed---     execution+-- -   #VUID-vkDestroySampler-sampler-01082# All submitted commands that+--     refer to @sampler@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroySampler-sampler-01083# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @sampler@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroySampler-sampler-01084# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @sampler@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroySampler-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   If @sampler@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @sampler@ /must/ be a valid 'Vulkan.Core10.Handles.Sampler' handle+-- -   #VUID-vkDestroySampler-sampler-parameter# If @sampler@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sampler@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Sampler' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroySampler-pAllocator-parameter# If @pAllocator@ is not+--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @sampler@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroySampler-sampler-parent# If @sampler@ is a valid+--     handle, it /must/ have been created, allocated, or retrieved from+--     @device@ -- -- == Host Synchronization --@@ -299,27 +306,31 @@ -- -- == Valid Usage ----- -   The absolute value of @mipLodBias@ /must/ be less than or equal to+-- -   #VUID-VkSamplerCreateInfo-mipLodBias-01069# The absolute value of+--     @mipLodBias@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSamplerLodBias@ ----- -   If the @VK_KHR_portability_subset@ extension is enabled, and+-- -   #VUID-VkSamplerCreateInfo-samplerMipLodBias-04467# If the+--     @VK_KHR_portability_subset@ extension is enabled, and --     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR'::@samplerMipLodBias@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE', @mipLodBias@ /must/ be --     zero. ----- -   @maxLod@ /must/ be greater than or equal to @minLod@+-- -   #VUID-VkSamplerCreateInfo-maxLod-01973# @maxLod@ /must/ be greater+--     than or equal to @minLod@ ----- -   If the+-- -   #VUID-VkSamplerCreateInfo-anisotropyEnable-01070# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerAnisotropy anisotropic sampling> --     feature is not enabled, @anisotropyEnable@ /must/ be --     'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If @anisotropyEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+-- -   #VUID-VkSamplerCreateInfo-anisotropyEnable-01071# If+--     @anisotropyEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', --     @maxAnisotropy@ /must/ be between @1.0@ and --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxSamplerAnisotropy@, --     inclusive ----- -   If+-- -   #VUID-VkSamplerCreateInfo-minFilter-01645# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion> --     is enabled and the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>@@ -328,39 +339,41 @@ --     @minFilter@ and @magFilter@ /must/ be equal to the sampler Y′CBCR --     conversion’s @chromaFilter@ ----- -   If @unnormalizedCoordinates@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', @minFilter@ and @magFilter@---     /must/ be equal+-- -   #VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01072# If+--     @unnormalizedCoordinates@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     @minFilter@ and @magFilter@ /must/ be equal ----- -   If @unnormalizedCoordinates@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', @mipmapMode@ /must/ be+-- -   #VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01073# If+--     @unnormalizedCoordinates@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     @mipmapMode@ /must/ be --     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST' ----- -   If @unnormalizedCoordinates@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', @minLod@ and @maxLod@ /must/---     be zero+-- -   #VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01074# If+--     @unnormalizedCoordinates@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     @minLod@ and @maxLod@ /must/ be zero ----- -   If @unnormalizedCoordinates@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', @addressModeU@ and---     @addressModeV@ /must/ each be either+-- -   #VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01075# If+--     @unnormalizedCoordinates@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     @addressModeU@ and @addressModeV@ /must/ each be either --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' --     or --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER' ----- -   If @unnormalizedCoordinates@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', @anisotropyEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'+-- -   #VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01076# If+--     @unnormalizedCoordinates@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     @anisotropyEnable@ /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If @unnormalizedCoordinates@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', @compareEnable@ /must/ be---     'Vulkan.Core10.FundamentalTypes.FALSE'+-- -   #VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01077# If+--     @unnormalizedCoordinates@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     @compareEnable@ /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If any of @addressModeU@, @addressModeV@ or @addressModeW@ are+-- -   #VUID-VkSamplerCreateInfo-addressModeU-01078# If any of+--     @addressModeU@, @addressModeV@ or @addressModeW@ are --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER', --     @borderColor@ /must/ be a valid --     'Vulkan.Core10.Enums.BorderColor.BorderColor' value ----- -   If+-- -   #VUID-VkSamplerCreateInfo-addressModeU-01646# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion> --     is enabled, @addressModeU@, @addressModeV@, and @addressModeW@ --     /must/ be@@ -369,92 +382,95 @@ --     and @unnormalizedCoordinates@ /must/ be --     'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   The sampler reduction mode /must/ be set to+-- -   #VUID-VkSamplerCreateInfo-None-01647# The sampler reduction mode+--     /must/ be set to --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE' --     if --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion> --     is enabled ----- -   If+-- -   #VUID-VkSamplerCreateInfo-addressModeU-01079# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerMirrorClampToEdge samplerMirrorClampToEdge> --     is not enabled, and if the @VK_KHR_sampler_mirror_clamp_to_edge@ --     extension is not enabled, @addressModeU@, @addressModeV@ and --     @addressModeW@ /must/ not be --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE' ----- -   If @compareEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',---     @compareOp@ /must/ be a valid+-- -   #VUID-VkSamplerCreateInfo-compareEnable-01080# If @compareEnable@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', @compareOp@ /must/ be a valid --     'Vulkan.Core10.Enums.CompareOp.CompareOp' value ----- -   If either @magFilter@ or @minFilter@ is+-- -   #VUID-VkSamplerCreateInfo-magFilter-01081# If either @magFilter@ or+--     @minFilter@ is --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', --     @anisotropyEnable@ /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If @compareEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', the---     @reductionMode@ member of+-- -   #VUID-VkSamplerCreateInfo-compareEnable-01423# If @compareEnable@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @reductionMode@ member of --     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo' --     /must/ be --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE' ----- -   If @flags@ includes+-- -   #VUID-VkSamplerCreateInfo-flags-02574# If @flags@ includes --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT', --     then @minFilter@ and @magFilter@ /must/ be equal ----- -   If @flags@ includes+-- -   #VUID-VkSamplerCreateInfo-flags-02575# If @flags@ includes --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT', --     then @mipmapMode@ /must/ be --     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_NEAREST' ----- -   If @flags@ includes+-- -   #VUID-VkSamplerCreateInfo-flags-02576# If @flags@ includes --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT', --     then @minLod@ and @maxLod@ /must/ be zero ----- -   If @flags@ includes+-- -   #VUID-VkSamplerCreateInfo-flags-02577# If @flags@ includes --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT', --     then @addressModeU@ and @addressModeV@ /must/ each be either --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' --     or --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER' ----- -   If @flags@ includes+-- -   #VUID-VkSamplerCreateInfo-flags-02578# If @flags@ includes --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT', --     then @anisotropyEnable@ /must/ be --     'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If @flags@ includes+-- -   #VUID-VkSamplerCreateInfo-flags-02579# If @flags@ includes --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT', --     then @compareEnable@ /must/ be --     'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If @flags@ includes+-- -   #VUID-VkSamplerCreateInfo-flags-02580# If @flags@ includes --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_BIT_EXT', --     then @unnormalizedCoordinates@ /must/ be --     'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If @borderColor@ is one of---     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or---     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT', then---     a+-- -   #VUID-VkSamplerCreateInfo-borderColor-04011# If @borderColor@ is one+--     of 'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT'+--     or 'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT',+--     then a --     'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT' --     /must/ be present in the @pNext@ chain ----- -   If the+-- -   #VUID-VkSamplerCreateInfo-customBorderColors-04085# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-customBorderColors customBorderColors> --     feature is not enabled, @borderColor@ /must/ not be --     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or --     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT' ----- -   If @borderColor@ is one of---     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT' or---     'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT', and+-- -   #VUID-VkSamplerCreateInfo-borderColor-04442# If @borderColor@ is one+--     of 'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT'+--     or 'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT',+--     and --     'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'::@format@ --     is not 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED', --     'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT'::@customBorderColor@ --     /must/ be within the range of values representable in @format@. ----- -   The maximum number of samplers with custom border colors which /can/---     be simultaneously created on a device is implementation-dependent---     and specified by the+-- -   #VUID-VkSamplerCreateInfo-None-04012# The maximum number of samplers+--     with custom border colors which /can/ be simultaneously created on a+--     device is implementation-dependent and specified by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxCustomBorderColorSamplers maxCustomBorderColorSamplers> --     member of the --     'Vulkan.Extensions.VK_EXT_custom_border_color.PhysicalDeviceCustomBorderColorPropertiesEXT'@@ -462,40 +478,45 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSamplerCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_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+-- -   #VUID-VkSamplerCreateInfo-pNext-pNext# 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 --     'Vulkan.Extensions.VK_EXT_custom_border_color.SamplerCustomBorderColorCreateInfoEXT', --     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo', --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.SamplerYcbcrConversionInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkSamplerCreateInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkSamplerCreateInfo-flags-parameter# @flags@ /must/ be a valid+--     combination of --     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SamplerCreateFlagBits' --     values ----- -   @magFilter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter'---     value+-- -   #VUID-VkSamplerCreateInfo-magFilter-parameter# @magFilter@ /must/ be+--     a valid 'Vulkan.Core10.Enums.Filter.Filter' value ----- -   @minFilter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter'---     value+-- -   #VUID-VkSamplerCreateInfo-minFilter-parameter# @minFilter@ /must/ be+--     a valid 'Vulkan.Core10.Enums.Filter.Filter' value ----- -   @mipmapMode@ /must/ be a valid---     'Vulkan.Core10.Enums.SamplerMipmapMode.SamplerMipmapMode' value+-- -   #VUID-VkSamplerCreateInfo-mipmapMode-parameter# @mipmapMode@ /must/+--     be a valid 'Vulkan.Core10.Enums.SamplerMipmapMode.SamplerMipmapMode'+--     value ----- -   @addressModeU@ /must/ be a valid+-- -   #VUID-VkSamplerCreateInfo-addressModeU-parameter# @addressModeU@+--     /must/ be a valid --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value ----- -   @addressModeV@ /must/ be a valid+-- -   #VUID-VkSamplerCreateInfo-addressModeV-parameter# @addressModeV@+--     /must/ be a valid --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value ----- -   @addressModeW@ /must/ be a valid+-- -   #VUID-VkSamplerCreateInfo-addressModeW-parameter# @addressModeW@+--     /must/ be a valid --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' value -- -- = See Also@@ -540,14 +561,15 @@     -- specifying the addressing mode for outside [0..1] range for W     -- coordinate.     addressModeW :: SamplerAddressMode-  , -- | @mipLodBias@ is the bias to be added to mipmap LOD (level-of-detail)-    -- calculation and bias provided by image sampling functions in SPIR-V, as-    -- described in the+  , -- | #samplers-mipLodBias# @mipLodBias@ is the bias to be added to mipmap LOD+    -- (level-of-detail) calculation and bias provided by image sampling+    -- functions in SPIR-V, as described in the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-level-of-detail-operation Level-of-Detail Operation>     -- section.     mipLodBias :: Float-  , -- | @anisotropyEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' to enable-    -- anisotropic filtering, as described in the+  , -- | #samplers-maxAnisotropy# @anisotropyEnable@ is+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' to enable anisotropic filtering,+    -- as described in the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-texel-anisotropic-filtering Texel Anisotropic Filtering>     -- section, or 'Vulkan.Core10.FundamentalTypes.FALSE' otherwise.     anisotropyEnable :: Bool@@ -579,11 +601,11 @@   , -- | @borderColor@ is a 'Vulkan.Core10.Enums.BorderColor.BorderColor' value     -- specifying the predefined border color to use.     borderColor :: BorderColor-  , -- | @unnormalizedCoordinates@ controls whether to use unnormalized or-    -- normalized texel coordinates to address texels of the image. When set to-    -- 'Vulkan.Core10.FundamentalTypes.TRUE', the range of the image-    -- coordinates used to lookup the texel is in the range of zero to the-    -- image dimensions for x, y and z. When set to+  , -- | #samplers-unnormalizedCoordinates# @unnormalizedCoordinates@ controls+    -- whether to use unnormalized or normalized texel coordinates to address+    -- texels of the image. When set to 'Vulkan.Core10.FundamentalTypes.TRUE',+    -- the range of the image coordinates used to lookup the texel is in the+    -- range of zero to the image dimensions for x, y and z. When set to     -- 'Vulkan.Core10.FundamentalTypes.FALSE' the range of image coordinates is     -- zero to one.     --
src/Vulkan/Core10/Shader.hs view
@@ -105,17 +105,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateShaderModule-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'ShaderModuleCreateInfo' structure+-- -   #VUID-vkCreateShaderModule-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'ShaderModuleCreateInfo'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateShaderModule-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pShaderModule@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.ShaderModule' handle+-- -   #VUID-vkCreateShaderModule-pShaderModule-parameter# @pShaderModule@+--     /must/ be a valid pointer to a 'Vulkan.Core10.Handles.ShaderModule'+--     handle -- -- == Return Codes --@@ -192,28 +195,33 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyShaderModule-shaderModule-01092# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @shaderModule@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyShaderModule-shaderModule-01093# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @shaderModule@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyShaderModule-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @shaderModule@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkDestroyShaderModule-shaderModule-parameter# If+--     @shaderModule@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @shaderModule@ /must/ be a valid --     'Vulkan.Core10.Handles.ShaderModule' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroyShaderModule-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @shaderModule@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyShaderModule-shaderModule-parent# If @shaderModule@+--     is a valid handle, it /must/ have been created, allocated, or+--     retrieved from @device@ -- -- == Host Synchronization --@@ -251,66 +259,77 @@ -- -- == Valid Usage ----- -   @codeSize@ /must/ be greater than 0+-- -   #VUID-VkShaderModuleCreateInfo-codeSize-01085# @codeSize@ /must/ be+--     greater than 0 ----- -   If @pCode@ is a pointer to SPIR-V code, @codeSize@ /must/ be a---     multiple of 4+-- -   #VUID-VkShaderModuleCreateInfo-pCode-01376# If @pCode@ is a pointer+--     to SPIR-V code, @codeSize@ /must/ be a multiple of 4 ----- -   @pCode@ /must/ point to either valid SPIR-V code, formatted and---     packed as described by the+-- -   #VUID-VkShaderModuleCreateInfo-pCode-01377# @pCode@ /must/ point to+--     either valid SPIR-V code, formatted and packed as described by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirv-spec Khronos SPIR-V Specification> --     or valid GLSL code which /must/ be written to the --     @GL_KHR_vulkan_glsl@ extension specification ----- -   If @pCode@ is a pointer to SPIR-V code, that code /must/ adhere to---     the validation rules described by the+-- -   #VUID-VkShaderModuleCreateInfo-pCode-01378# If @pCode@ is a pointer+--     to SPIR-V code, that code /must/ adhere to the validation rules+--     described by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-module-validation Validation Rules within a Module> --     section of the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities SPIR-V Environment> --     appendix ----- -   If @pCode@ is a pointer to GLSL code, it /must/ be valid GLSL code---     written to the @GL_KHR_vulkan_glsl@ GLSL extension specification+-- -   #VUID-VkShaderModuleCreateInfo-pCode-01379# If @pCode@ is a pointer+--     to GLSL code, it /must/ be valid GLSL code written to the+--     @GL_KHR_vulkan_glsl@ GLSL extension specification ----- -   @pCode@ /must/ declare the @Shader@ capability for SPIR-V code+-- -   #VUID-VkShaderModuleCreateInfo-pCode-01089# @pCode@ /must/ declare+--     the @Shader@ capability for SPIR-V code ----- -   @pCode@ /must/ not declare any capability that is not supported by---     the API, as described by the+-- -   #VUID-VkShaderModuleCreateInfo-pCode-01090# @pCode@ /must/ not+--     declare any capability that is not supported by the API, as+--     described by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-module-validation Capabilities> --     section of the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities SPIR-V Environment> --     appendix ----- -   If @pCode@ declares any of the capabilities listed in the+-- -   #VUID-VkShaderModuleCreateInfo-pCode-01091# If @pCode@ declares any+--     of the capabilities listed in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table SPIR-V Environment> --     appendix, one of the corresponding requirements /must/ be satisfied ----- -   @pCode@ /must/ not declare any SPIR-V extension that is not---     supported by the API, as described by the+-- -   #VUID-VkShaderModuleCreateInfo-pCode-04146# @pCode@ /must/ not+--     declare any SPIR-V extension that is not supported by the API, as+--     described by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-extensions Extension> --     section of the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities SPIR-V Environment> --     appendix ----- -   If @pCode@ declares any of the SPIR-V extensions listed in the+-- -   #VUID-VkShaderModuleCreateInfo-pCode-04147# If @pCode@ declares any+--     of the SPIR-V extensions listed in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-extensions-table SPIR-V Environment> --     appendix, one of the corresponding requirements /must/ be satisfied -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkShaderModuleCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkShaderModuleCreateInfo-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Extensions.VK_EXT_validation_cache.ShaderModuleValidationCacheCreateInfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkShaderModuleCreateInfo-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkShaderModuleCreateInfo-flags-zerobitmask# @flags@ /must/ be+--     @0@ ----- -   @pCode@ /must/ be a valid pointer to an array of---     \(\textrm{codeSize} \over 4\) @uint32_t@ values+-- -   #VUID-VkShaderModuleCreateInfo-pCode-parameter# @pCode@ /must/ be a+--     valid pointer to an array of \(\textrm{codeSize} \over 4\)+--     @uint32_t@ values -- -- = See Also --
src/Vulkan/Core10/SparseResourceMemoryManagement.hs view
@@ -160,21 +160,25 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetImageSparseMemoryRequirements-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-vkGetImageSparseMemoryRequirements-image-parameter# @image@+--     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle ----- -   @pSparseMemoryRequirementCount@ /must/ be a valid pointer to a+-- -   #VUID-vkGetImageSparseMemoryRequirements-pSparseMemoryRequirementCount-parameter#+--     @pSparseMemoryRequirementCount@ /must/ be a valid pointer to a --     @uint32_t@ value ----- -   If the value referenced by @pSparseMemoryRequirementCount@ is not+-- -   #VUID-vkGetImageSparseMemoryRequirements-pSparseMemoryRequirements-parameter#+--     If the value referenced by @pSparseMemoryRequirementCount@ is not --     @0@, and @pSparseMemoryRequirements@ is not @NULL@, --     @pSparseMemoryRequirements@ /must/ be a valid pointer to an array of --     @pSparseMemoryRequirementCount@ 'SparseImageMemoryRequirements' --     structures ----- -   @image@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkGetImageSparseMemoryRequirements-image-parent# @image@+--     /must/ have been created, allocated, or retrieved from @device@ -- -- = See Also --@@ -242,7 +246,8 @@ -- -- == Valid Usage ----- -   @samples@ /must/ be a bit value that is set in+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-01094#+--     @samples@ /must/ be a bit value that is set in --     'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@sampleCounts@ --     returned by --     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties'@@ -253,28 +258,37 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-format-parameter#+--     @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value ----- -   @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType'+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-type-parameter#+--     @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType' --     value ----- -   @samples@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-parameter#+--     @samples@ /must/ be a valid --     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value ----- -   @usage@ /must/ be a valid combination of+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-usage-parameter#+--     @usage@ /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values ----- -   @usage@ /must/ not be @0@+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-usage-requiredbitmask#+--     @usage@ /must/ not be @0@ ----- -   @tiling@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-tiling-parameter#+--     @tiling@ /must/ be a valid --     'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties-pProperties-parameter#+--     If the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'SparseImageFormatProperties' --     structures@@ -356,31 +370,36 @@ -- -- == Valid Usage ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ be unsignaled+-- -   #VUID-vkQueueBindSparse-fence-01113# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be+--     unsignaled ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ not be associated with any other queue command that has not---     yet completed execution on that queue+-- -   #VUID-vkQueueBindSparse-fence-01114# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ not be+--     associated with any other queue command that has not yet completed+--     execution on that queue ----- -   Each element of the @pSignalSemaphores@ member of each element of---     @pBindInfo@ /must/ be unsignaled when the semaphore signal operation---     it defines is executed on the device+-- -   #VUID-vkQueueBindSparse-pSignalSemaphores-01115# Each element of the+--     @pSignalSemaphores@ member of each element of @pBindInfo@ /must/ be+--     unsignaled when the semaphore signal operation it defines is+--     executed on the device ----- -   When a semaphore wait operation referring to a binary semaphore---     defined by any element of the @pWaitSemaphores@ member of any---     element of @pBindInfo@ executes on @queue@, there /must/ be no other---     queues waiting on the same semaphore+-- -   #VUID-vkQueueBindSparse-pWaitSemaphores-01116# When a semaphore wait+--     operation referring to a binary semaphore defined by any element of+--     the @pWaitSemaphores@ member of any element of @pBindInfo@ executes+--     on @queue@, there /must/ be no other queues waiting on the same+--     semaphore ----- -   All elements of the @pWaitSemaphores@ member of all elements of---     @pBindInfo@ member referring to a binary semaphore /must/ be---     semaphores that are signaled, or have+-- -   #VUID-vkQueueBindSparse-pWaitSemaphores-01117# All elements of the+--     @pWaitSemaphores@ member of all elements of @pBindInfo@ member+--     referring to a binary semaphore /must/ be semaphores that are+--     signaled, or have --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operations> --     previously submitted for execution ----- -   All elements of the @pWaitSemaphores@ member of all elements of---     @pBindInfo@ created with a---     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of+-- -   #VUID-vkQueueBindSparse-pWaitSemaphores-03245# All elements of the+--     @pWaitSemaphores@ member of all elements of @pBindInfo@ created with+--     a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' /must/ --     reference a semaphore signal operation that has been submitted for --     execution and any semaphore signal operations on which it depends@@ -388,19 +407,24 @@ -- -- == Valid Usage (Implicit) ----- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+-- -   #VUID-vkQueueBindSparse-queue-parameter# @queue@ /must/ be a valid+--     'Vulkan.Core10.Handles.Queue' handle ----- -   If @bindInfoCount@ is not @0@, @pBindInfo@ /must/ be a valid pointer---     to an array of @bindInfoCount@ valid 'BindSparseInfo' structures+-- -   #VUID-vkQueueBindSparse-pBindInfo-parameter# If @bindInfoCount@ is+--     not @0@, @pBindInfo@ /must/ be a valid pointer to an array of+--     @bindInfoCount@ valid 'BindSparseInfo' structures ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-vkQueueBindSparse-fence-parameter# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be a valid+--     'Vulkan.Core10.Handles.Fence' handle ----- -   The @queue@ /must/ support sparse binding operations+-- -   #VUID-vkQueueBindSparse-queuetype# The @queue@ /must/ support sparse+--     binding operations ----- -   Both of @fence@, and @queue@ that are valid handles of non-ignored---     parameters /must/ have been created, allocated, or retrieved from---     the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkQueueBindSparse-commonparent# Both of @fence@, and @queue@+--     that are valid handles of non-ignored parameters /must/ have been+--     created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -615,10 +639,12 @@     -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlags' selecting the     -- image /aspect/.     ---    -- @aspectMask@ /must/ be a valid combination of+    -- #VUID-VkImageSubresource-aspectMask-parameter# @aspectMask@ /must/ be a+    -- valid combination of     -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values     ---    -- @aspectMask@ /must/ not be @0@+    -- #VUID-VkImageSubresource-aspectMask-requiredbitmask# @aspectMask@ /must/+    -- not be @0@     aspectMask :: ImageAspectFlags   , -- | @mipLevel@ selects the mipmap level.     mipLevel :: Word32@@ -697,30 +723,34 @@ -- -- == Valid Usage ----- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @memory@ and @memoryOffset@ /must/ match the memory requirements of---     the resource, as described in section+-- -   #VUID-VkSparseMemoryBind-memory-01096# If @memory@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ and+--     @memoryOffset@ /must/ match the memory requirements of the resource,+--     as described in section --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-association> ----- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @memory@ /must/ not have been created with a memory type that---     reports+-- -   #VUID-VkSparseMemoryBind-memory-01097# If @memory@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ /must/ not have+--     been created with a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT' --     bit set ----- -   @size@ /must/ be greater than @0@+-- -   #VUID-VkSparseMemoryBind-size-01098# @size@ /must/ be greater than+--     @0@ ----- -   @resourceOffset@ /must/ be less than the size of the resource+-- -   #VUID-VkSparseMemoryBind-resourceOffset-01099# @resourceOffset@+--     /must/ be less than the size of the resource ----- -   @size@ /must/ be less than or equal to the size of the resource---     minus @resourceOffset@+-- -   #VUID-VkSparseMemoryBind-size-01100# @size@ /must/ be less than or+--     equal to the size of the resource minus @resourceOffset@ ----- -   @memoryOffset@ /must/ be less than the size of @memory@+-- -   #VUID-VkSparseMemoryBind-memoryOffset-01101# @memoryOffset@ /must/+--     be less than the size of @memory@ ----- -   @size@ /must/ be less than or equal to the size of @memory@ minus---     @memoryOffset@+-- -   #VUID-VkSparseMemoryBind-size-01102# @size@ /must/ be less than or+--     equal to the size of @memory@ minus @memoryOffset@ ----- -   If @memory@ was created with+-- -   #VUID-VkSparseMemoryBind-memory-02730# If @memory@ was created with --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     not equal to @0@, at least one handle type it contained /must/ also --     have been set in@@ -729,8 +759,9 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when the resource was created ----- -   If @memory@ was created by a memory import operation, the external---     handle type of the imported memory /must/ also have been set in+-- -   #VUID-VkSparseMemoryBind-memory-02731# If @memory@ was created by a+--     memory import operation, the external handle type of the imported+--     memory /must/ also have been set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@ --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@@@ -738,11 +769,12 @@ -- -- == Valid Usage (Implicit) ----- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-VkSparseMemoryBind-memory-parameter# If @memory@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ /must/ be a valid+--     'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkSparseMemoryBind-flags-parameter# @flags@ /must/ be a valid+--     combination of --     'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlagBits' --     values --@@ -823,64 +855,76 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkSparseImageMemoryBind-memory-01104# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseResidencyAliased sparse aliased residency> --     feature is not enabled, and if any other resources are bound to --     ranges of @memory@, the range of @memory@ being bound /must/ not --     overlap with those bound ranges ----- -   @memory@ and @memoryOffset@ /must/ match the memory requirements of---     the calling command’s @image@, as described in section+-- -   #VUID-VkSparseImageMemoryBind-memory-01105# @memory@ and+--     @memoryOffset@ /must/ match the memory requirements of the calling+--     command’s @image@, as described in section --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-association> ----- -   @subresource@ /must/ be a valid image subresource for @image@ (see+-- -   #VUID-VkSparseImageMemoryBind-subresource-01106# @subresource@+--     /must/ be a valid image subresource for @image@ (see --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views>) ----- -   @offset.x@ /must/ be a multiple of the sparse image block width+-- -   #VUID-VkSparseImageMemoryBind-offset-01107# @offset.x@ /must/ be a+--     multiple of the sparse image block width --     ('SparseImageFormatProperties'::@imageGranularity.width@) of the --     image ----- -   @extent.width@ /must/ either be a multiple of the sparse image block---     width of the image, or else (@extent.width@ + @offset.x@) /must/---     equal the width of the image subresource+-- -   #VUID-VkSparseImageMemoryBind-extent-01108# @extent.width@ /must/+--     either be a multiple of the sparse image block width of the image,+--     or else (@extent.width@ + @offset.x@) /must/ equal the width of the+--     image subresource ----- -   @offset.y@ /must/ be a multiple of the sparse image block height+-- -   #VUID-VkSparseImageMemoryBind-offset-01109# @offset.y@ /must/ be a+--     multiple of the sparse image block height --     ('SparseImageFormatProperties'::@imageGranularity.height@) of the --     image ----- -   @extent.height@ /must/ either be a multiple of the sparse image---     block height of the image, or else (@extent.height@ + @offset.y@)---     /must/ equal the height of the image subresource+-- -   #VUID-VkSparseImageMemoryBind-extent-01110# @extent.height@ /must/+--     either be a multiple of the sparse image block height of the image,+--     or else (@extent.height@ + @offset.y@) /must/ equal the height of+--     the image subresource ----- -   @offset.z@ /must/ be a multiple of the sparse image block depth+-- -   #VUID-VkSparseImageMemoryBind-offset-01111# @offset.z@ /must/ be a+--     multiple of the sparse image block depth --     ('SparseImageFormatProperties'::@imageGranularity.depth@) of the --     image ----- -   @extent.depth@ /must/ either be a multiple of the sparse image block---     depth of the image, or else (@extent.depth@ + @offset.z@) /must/---     equal the depth of the image subresource+-- -   #VUID-VkSparseImageMemoryBind-extent-01112# @extent.depth@ /must/+--     either be a multiple of the sparse image block depth of the image,+--     or else (@extent.depth@ + @offset.z@) /must/ equal the depth of the+--     image subresource ----- -   If @memory@ was created with+-- -   #VUID-VkSparseImageMemoryBind-memory-02732# If @memory@ was created+--     with --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     not equal to @0@, at least one handle type it contained /must/ also --     have been set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when the image was created ----- -   If @memory@ was created by a memory import operation, the external---     handle type of the imported memory /must/ also have been set in+-- -   #VUID-VkSparseImageMemoryBind-memory-02733# If @memory@ was created+--     by a memory import operation, the external handle type of the+--     imported memory /must/ also have been set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when @image@ was created -- -- == Valid Usage (Implicit) ----- -   @subresource@ /must/ be a valid 'ImageSubresource' structure+-- -   #VUID-VkSparseImageMemoryBind-subresource-parameter# @subresource@+--     /must/ be a valid 'ImageSubresource' structure ----- -   If @memory@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-VkSparseImageMemoryBind-memory-parameter# If @memory@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @memory@ /must/ be a valid+--     'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkSparseImageMemoryBind-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SparseMemoryBindFlagBits' --     values --@@ -973,12 +1017,14 @@ data SparseBufferMemoryBindInfo = SparseBufferMemoryBindInfo   { -- | @buffer@ is the 'Vulkan.Core10.Handles.Buffer' object to be bound.     ---    -- @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+    -- #VUID-VkSparseBufferMemoryBindInfo-buffer-parameter# @buffer@ /must/ be+    -- a valid 'Vulkan.Core10.Handles.Buffer' handle     buffer :: Buffer   , -- | @pBinds@ is a pointer to array of 'SparseMemoryBind' structures.     ---    -- @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid-    -- 'SparseMemoryBind' structures+    -- #VUID-VkSparseBufferMemoryBindInfo-pBinds-parameter# @pBinds@ /must/ be+    -- a valid pointer to an array of @bindCount@ valid 'SparseMemoryBind'+    -- structures     binds :: Vector SparseMemoryBind   }   deriving (Typeable)@@ -1025,19 +1071,23 @@ -- -- == Valid Usage ----- -   If the @flags@ member of any element of @pBinds@ contains+-- -   #VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103# If the @flags@+--     member of any element of @pBinds@ contains --     'Vulkan.Core10.Enums.SparseMemoryBindFlagBits.SPARSE_MEMORY_BIND_METADATA_BIT', --     the binding range defined /must/ be within the mip tail region of --     the metadata aspect of @image@ -- -- == Valid Usage (Implicit) ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-VkSparseImageOpaqueMemoryBindInfo-image-parameter# @image@+--     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle ----- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid+-- -   #VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-parameter# @pBinds@+--     /must/ be a valid pointer to an array of @bindCount@ valid --     'SparseMemoryBind' structures ----- -   @bindCount@ /must/ be greater than @0@+-- -   #VUID-VkSparseImageOpaqueMemoryBindInfo-bindCount-arraylength#+--     @bindCount@ /must/ be greater than @0@ -- -- = See Also --@@ -1092,26 +1142,32 @@ -- -- == Valid Usage ----- -   The @subresource.mipLevel@ member of each element of @pBinds@ /must/---     be less than the @mipLevels@ specified in+-- -   #VUID-VkSparseImageMemoryBindInfo-subresource-01722# The+--     @subresource.mipLevel@ member of each element of @pBinds@ /must/ be+--     less than the @mipLevels@ specified in --     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created ----- -   The @subresource.arrayLayer@ member of each element of @pBinds@---     /must/ be less than the @arrayLayers@ specified in+-- -   #VUID-VkSparseImageMemoryBindInfo-subresource-01723# The+--     @subresource.arrayLayer@ member of each element of @pBinds@ /must/+--     be less than the @arrayLayers@ specified in --     'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was created ----- -   @image@ /must/ have been created with+-- -   #VUID-VkSparseImageMemoryBindInfo-image-02901# @image@ /must/ have+--     been created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT' --     set -- -- == Valid Usage (Implicit) ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-VkSparseImageMemoryBindInfo-image-parameter# @image@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Image' handle ----- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid+-- -   #VUID-VkSparseImageMemoryBindInfo-pBinds-parameter# @pBinds@ /must/+--     be a valid pointer to an array of @bindCount@ valid --     'SparseImageMemoryBind' structures ----- -   @bindCount@ /must/ be greater than @0@+-- -   #VUID-VkSparseImageMemoryBindInfo-bindCount-arraylength# @bindCount@+--     /must/ be greater than @0@ -- -- = See Also --@@ -1165,21 +1221,24 @@ -- -- == Valid Usage ----- -   If any element of @pWaitSemaphores@ or @pSignalSemaphores@ was---     created with a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of+-- -   #VUID-VkBindSparseInfo-pWaitSemaphores-03246# If any element of+--     @pWaitSemaphores@ or @pSignalSemaphores@ was created with a+--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' then the --     @pNext@ chain /must/ include a --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo' --     structure ----- -   If the @pNext@ chain of this structure includes a+-- -   #VUID-VkBindSparseInfo-pNext-03247# If the @pNext@ chain of this+--     structure includes a --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo' --     structure and any element of @pWaitSemaphores@ was created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' then its --     @waitSemaphoreValueCount@ member /must/ equal @waitSemaphoreCount@ ----- -   If the @pNext@ chain of this structure includes a+-- -   #VUID-VkBindSparseInfo-pNext-03248# If the @pNext@ chain of this+--     structure includes a --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo' --     structure and any element of @pSignalSemaphores@ was created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of@@ -1187,7 +1246,8 @@ --     @signalSemaphoreValueCount@ member /must/ equal --     @signalSemaphoreCount@ ----- -   For each element of @pSignalSemaphores@ created with a+-- -   #VUID-VkBindSparseInfo-pSignalSemaphores-03249# For each element of+--     @pSignalSemaphores@ created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the --     corresponding element of@@ -1197,7 +1257,8 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation> --     is executed ----- -   For each element of @pWaitSemaphores@ created with a+-- -   #VUID-VkBindSparseInfo-pWaitSemaphores-03250# For each element of+--     @pWaitSemaphores@ created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the --     corresponding element of@@ -1207,7 +1268,8 @@ --     signal operation on that semaphore by more than --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference> ----- -   For each element of @pSignalSemaphores@ created with a+-- -   #VUID-VkBindSparseInfo-pSignalSemaphores-03251# For each element of+--     @pSignalSemaphores@ created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' the --     corresponding element of@@ -1219,43 +1281,46 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBindSparseInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_SPARSE_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+-- -   #VUID-VkBindSparseInfo-pNext-pNext# 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 --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group.DeviceGroupBindSparseInfo' --     or --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.TimelineSemaphoreSubmitInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkBindSparseInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a---     valid pointer to an array of @waitSemaphoreCount@ valid+-- -   #VUID-VkBindSparseInfo-pWaitSemaphores-parameter# If+--     @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a valid+--     pointer to an array of @waitSemaphoreCount@ valid --     'Vulkan.Core10.Handles.Semaphore' handles ----- -   If @bufferBindCount@ is not @0@, @pBufferBinds@ /must/ be a valid---     pointer to an array of @bufferBindCount@ valid---     'SparseBufferMemoryBindInfo' structures+-- -   #VUID-VkBindSparseInfo-pBufferBinds-parameter# If @bufferBindCount@+--     is not @0@, @pBufferBinds@ /must/ be a valid pointer to an array of+--     @bufferBindCount@ valid 'SparseBufferMemoryBindInfo' structures ----- -   If @imageOpaqueBindCount@ is not @0@, @pImageOpaqueBinds@ /must/ be---     a valid pointer to an array of @imageOpaqueBindCount@ valid+-- -   #VUID-VkBindSparseInfo-pImageOpaqueBinds-parameter# If+--     @imageOpaqueBindCount@ is not @0@, @pImageOpaqueBinds@ /must/ be a+--     valid pointer to an array of @imageOpaqueBindCount@ valid --     'SparseImageOpaqueMemoryBindInfo' structures ----- -   If @imageBindCount@ is not @0@, @pImageBinds@ /must/ be a valid---     pointer to an array of @imageBindCount@ valid---     'SparseImageMemoryBindInfo' structures+-- -   #VUID-VkBindSparseInfo-pImageBinds-parameter# If @imageBindCount@ is+--     not @0@, @pImageBinds@ /must/ be a valid pointer to an array of+--     @imageBindCount@ valid 'SparseImageMemoryBindInfo' structures ----- -   If @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be---     a valid pointer to an array of @signalSemaphoreCount@ valid+-- -   #VUID-VkBindSparseInfo-pSignalSemaphores-parameter# If+--     @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be a+--     valid pointer to an array of @signalSemaphoreCount@ valid --     'Vulkan.Core10.Handles.Semaphore' handles ----- -   Both of the elements of @pSignalSemaphores@, and the elements of---     @pWaitSemaphores@ that are valid handles of non-ignored parameters---     /must/ have been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkBindSparseInfo-commonparent# Both of the elements of+--     @pSignalSemaphores@, and the elements of @pWaitSemaphores@ that are+--     valid handles of non-ignored parameters /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- = See Also --
src/Vulkan/Core11/Enums/SubgroupFeatureFlagBits.hs view
@@ -37,35 +37,42 @@ newtype SubgroupFeatureFlagBits = SubgroupFeatureFlagBits Flags   deriving newtype (Eq, Ord, Storable, Zero, Bits) --- | 'SUBGROUP_FEATURE_BASIC_BIT' specifies the device will accept SPIR-V--- shader modules containing the @GroupNonUniform@ capability.+-- | #features-subgroup-basic# 'SUBGROUP_FEATURE_BASIC_BIT' specifies the+-- device will accept SPIR-V shader modules containing the+-- @GroupNonUniform@ capability. pattern SUBGROUP_FEATURE_BASIC_BIT = SubgroupFeatureFlagBits 0x00000001--- | 'SUBGROUP_FEATURE_VOTE_BIT' specifies the device will accept SPIR-V--- shader modules containing the @GroupNonUniformVote@ capability.+-- | #features-subgroup-vote# 'SUBGROUP_FEATURE_VOTE_BIT' specifies the+-- device will accept SPIR-V shader modules containing the+-- @GroupNonUniformVote@ capability. pattern SUBGROUP_FEATURE_VOTE_BIT = SubgroupFeatureFlagBits 0x00000002--- | 'SUBGROUP_FEATURE_ARITHMETIC_BIT' specifies the device will accept--- SPIR-V shader modules containing the @GroupNonUniformArithmetic@--- capability.+-- | #features-subgroup-arithmetic# 'SUBGROUP_FEATURE_ARITHMETIC_BIT'+-- specifies the device will accept SPIR-V shader modules containing the+-- @GroupNonUniformArithmetic@ capability. pattern SUBGROUP_FEATURE_ARITHMETIC_BIT = SubgroupFeatureFlagBits 0x00000004--- | 'SUBGROUP_FEATURE_BALLOT_BIT' specifies the device will accept SPIR-V--- shader modules containing the @GroupNonUniformBallot@ capability.+-- | #features-subgroup-ballot# 'SUBGROUP_FEATURE_BALLOT_BIT' specifies the+-- device will accept SPIR-V shader modules containing the+-- @GroupNonUniformBallot@ capability. pattern SUBGROUP_FEATURE_BALLOT_BIT = SubgroupFeatureFlagBits 0x00000008--- | 'SUBGROUP_FEATURE_SHUFFLE_BIT' specifies the device will accept SPIR-V--- shader modules containing the @GroupNonUniformShuffle@ capability.+-- | #features-subgroup-shuffle# 'SUBGROUP_FEATURE_SHUFFLE_BIT' specifies the+-- device will accept SPIR-V shader modules containing the+-- @GroupNonUniformShuffle@ capability. pattern SUBGROUP_FEATURE_SHUFFLE_BIT = SubgroupFeatureFlagBits 0x00000010--- | 'SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT' specifies the device will accept+-- | #features-subgroup-shuffle-relative#+-- 'SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT' specifies the device will accept -- SPIR-V shader modules containing the @GroupNonUniformShuffleRelative@ -- capability. pattern SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = SubgroupFeatureFlagBits 0x00000020--- | 'SUBGROUP_FEATURE_CLUSTERED_BIT' specifies the device will accept SPIR-V--- shader modules containing the @GroupNonUniformClustered@ capability.+-- | #features-subgroup-clustered# 'SUBGROUP_FEATURE_CLUSTERED_BIT' specifies+-- the device will accept SPIR-V shader modules containing the+-- @GroupNonUniformClustered@ capability. pattern SUBGROUP_FEATURE_CLUSTERED_BIT = SubgroupFeatureFlagBits 0x00000040--- | 'SUBGROUP_FEATURE_QUAD_BIT' specifies the device will accept SPIR-V--- shader modules containing the @GroupNonUniformQuad@ capability.+-- | #features-subgroup-quad# 'SUBGROUP_FEATURE_QUAD_BIT' specifies the+-- device will accept SPIR-V shader modules containing the+-- @GroupNonUniformQuad@ capability. pattern SUBGROUP_FEATURE_QUAD_BIT = SubgroupFeatureFlagBits 0x00000080--- | 'SUBGROUP_FEATURE_PARTITIONED_BIT_NV' specifies the device will accept--- SPIR-V shader modules containing the @GroupNonUniformPartitionedNV@--- capability.+-- | #features-subgroup-partitioned# 'SUBGROUP_FEATURE_PARTITIONED_BIT_NV'+-- specifies the device will accept SPIR-V shader modules containing the+-- @GroupNonUniformPartitionedNV@ capability. pattern SUBGROUP_FEATURE_PARTITIONED_BIT_NV = SubgroupFeatureFlagBits 0x00000100  type SubgroupFeatureFlags = SubgroupFeatureFlagBits
src/Vulkan/Core11/Originally_Based_On_VK_KHR_protected_memory.hs view
@@ -98,13 +98,14 @@                  . (MonadIO io)                 => -- | @device@ is the logical device that owns the queue.                    ---                   -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                   -- #VUID-vkGetDeviceQueue2-device-parameter# @device@ /must/ be a valid+                   -- 'Vulkan.Core10.Handles.Device' handle                    Device                 -> -- | @pQueueInfo@ is a pointer to a 'DeviceQueueInfo2' structure, describing                    -- the parameters used to create the device queue.                    ---                   -- @pQueueInfo@ /must/ be a valid pointer to a valid 'DeviceQueueInfo2'-                   -- structure+                   -- #VUID-vkGetDeviceQueue2-pQueueInfo-parameter# @pQueueInfo@ /must/ be a+                   -- valid pointer to a valid 'DeviceQueueInfo2' structure                    DeviceQueueInfo2                 -> io (Queue) getDeviceQueue2 device queueInfo = liftIO . evalContT $ do@@ -125,12 +126,13 @@ -- -- == Valid Usage ----- -   If the protected memory feature is not enabled, @protectedSubmit@---     /must/ not be 'Vulkan.Core10.FundamentalTypes.TRUE'+-- -   #VUID-VkProtectedSubmitInfo-protectedSubmit-01816# If the protected+--     memory feature is not enabled, @protectedSubmit@ /must/ not be+--     'Vulkan.Core10.FundamentalTypes.TRUE' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkProtectedSubmitInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO' -- -- = See Also@@ -200,7 +202,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceProtectedMemoryFeatures = PhysicalDeviceProtectedMemoryFeatures-  { -- | @protectedMemory@ specifies whether protected memory is supported.+  { -- | #extension-features-protectedMemory# @protectedMemory@ specifies whether+    -- protected memory is supported.     protectedMemory :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -324,22 +327,24 @@     -- 'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags'     -- value indicating the flags used to create the device queue.     ---    -- @flags@ /must/ be a valid combination of+    -- #VUID-VkDeviceQueueInfo2-flags-parameter# @flags@ /must/ be a valid+    -- combination of     -- 'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlagBits'     -- values     flags :: DeviceQueueCreateFlags   , -- | @queueFamilyIndex@ is the index of the queue family to which the queue     -- belongs.     ---    -- @queueFamilyIndex@ /must/ be one of the queue family indices specified-    -- when @device@ was created, via the-    -- 'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure+    -- #VUID-VkDeviceQueueInfo2-queueFamilyIndex-01842# @queueFamilyIndex@+    -- /must/ be one of the queue family indices specified when @device@ was+    -- created, via the 'Vulkan.Core10.Device.DeviceQueueCreateInfo' structure     queueFamilyIndex :: Word32   , -- | @queueIndex@ is the index within this queue family of the queue to     -- retrieve.     ---    -- @queueIndex@ /must/ be less than the number of queues created for the-    -- specified queue family index and+    -- #VUID-VkDeviceQueueInfo2-queueIndex-01843# @queueIndex@ /must/ be less+    -- than the number of queues created for the specified queue family index+    -- and     -- 'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags'     -- member @flags@ equal to this @flags@ value when @device@ was created,     -- via the @queueCount@ member of the
src/Vulkan/Core11/Originally_Based_On_VK_KHR_subgroup.hs view
@@ -60,13 +60,14 @@ -- 'Vulkan.Core10.Enums.StructureType.StructureType', -- 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlags' data PhysicalDeviceSubgroupProperties = PhysicalDeviceSubgroupProperties-  { -- | @subgroupSize@ is the default number of invocations in each subgroup.-    -- @subgroupSize@ is at least 1 if any of the physical device’s queues-    -- support 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+  { -- | #extension-limits-subgroup-size# @subgroupSize@ is the default number of+    -- invocations in each subgroup. @subgroupSize@ is at least 1 if any of the+    -- physical device’s queues support+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'. @subgroupSize@ is     -- a power-of-two.     subgroupSize :: Word32-  , -- | @supportedStages@ is a bitfield of+  , -- | #limits-subgroup-supportedStages# @supportedStages@ is a bitfield of     -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' describing     -- the shader stages that     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>@@ -77,8 +78,8 @@     -- set if any of the physical device’s queues support     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.     supportedStages :: ShaderStageFlags-  , -- | @supportedOperations@ is a bitmask of-    -- 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlagBits'+  , -- | #limits-subgroupSupportedOperations# @supportedOperations@ is a bitmask+    -- of 'Vulkan.Core11.Enums.SubgroupFeatureFlagBits.SubgroupFeatureFlagBits'     -- specifying the sets of     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>     -- with@@ -89,7 +90,8 @@     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.     supportedOperations :: SubgroupFeatureFlags-  , -- | @quadOperationsInAllStages@ is a boolean specifying whether+  , -- | #limits-subgroup-quadOperationsInAllStages# @quadOperationsInAllStages@+    -- is a boolean specifying whether     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-quad-operations quad group operations>     -- are available in all stages, or are restricted to fragment and compute     -- stages.
src/Vulkan/Core11/Promoted_From_VK_KHR_16bit_storage.hs view
@@ -35,15 +35,16 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevice16BitStorageFeatures = PhysicalDevice16BitStorageFeatures-  { -- | @storageBuffer16BitAccess@ specifies whether objects in the-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the-    -- @Block@ decoration /can/ have 16-bit integer and 16-bit floating-point-    -- members. If this feature is not enabled, 16-bit integer or 16-bit-    -- floating-point members /must/ not be used in such objects. This also-    -- specifies whether shader modules /can/ declare the-    -- @StorageBuffer16BitAccess@ capability.+  { -- | #extension-features-storageBuffer16BitAccess# @storageBuffer16BitAccess@+    -- specifies whether objects in the @StorageBuffer@ or+    -- @PhysicalStorageBuffer@ storage class with the @Block@ decoration /can/+    -- have 16-bit integer and 16-bit floating-point members. If this feature+    -- is not enabled, 16-bit integer or 16-bit floating-point members /must/+    -- not be used in such objects. This also specifies whether shader modules+    -- /can/ declare the @StorageBuffer16BitAccess@ capability.     storageBuffer16BitAccess :: Bool-  , -- | @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the+  , -- | #extension-features-uniformAndStorageBuffer16BitAccess#+    -- @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the     -- @Uniform@ storage class with the @Block@ decoration and in the     -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same     -- decoration /can/ have 16-bit integer and 16-bit floating-point members.@@ -52,19 +53,19 @@     -- shader modules /can/ declare the @UniformAndStorageBuffer16BitAccess@     -- capability.     uniformAndStorageBuffer16BitAccess :: Bool-  , -- | @storagePushConstant16@ specifies whether objects in the @PushConstant@-    -- storage class /can/ have 16-bit integer and 16-bit floating-point-    -- members. If this feature is not enabled, 16-bit integer or-    -- floating-point members /must/ not be used in such objects. This also-    -- specifies whether shader modules /can/ declare the-    -- @StoragePushConstant16@ capability.+  , -- | #extension-features-storagePushConstant16# @storagePushConstant16@+    -- specifies whether objects in the @PushConstant@ storage class /can/ have+    -- 16-bit integer and 16-bit floating-point members. If this feature is not+    -- enabled, 16-bit integer or floating-point members /must/ not be used in+    -- such objects. This also specifies whether shader modules /can/ declare+    -- the @StoragePushConstant16@ capability.     storagePushConstant16 :: Bool-  , -- | @storageInputOutput16@ specifies whether objects in the @Input@ and-    -- @Output@ storage classes /can/ have 16-bit integer and 16-bit-    -- floating-point members. If this feature is not enabled, 16-bit integer-    -- or 16-bit floating-point members /must/ not be used in such objects.-    -- This also specifies whether shader modules /can/ declare the-    -- @StorageInputOutput16@ capability.+  , -- | #extension-features-storageInputOutput16# @storageInputOutput16@+    -- specifies whether objects in the @Input@ and @Output@ storage classes+    -- /can/ have 16-bit integer and 16-bit floating-point members. If this+    -- feature is not enabled, 16-bit integer or 16-bit floating-point members+    -- /must/ not be used in such objects. This also specifies whether shader+    -- modules /can/ declare the @StorageInputOutput16@ capability.     storageInputOutput16 :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Core11/Promoted_From_VK_KHR_bind_memory2.hs view
@@ -110,13 +110,15 @@                    . (MonadIO io)                   => -- | @device@ is the logical device that owns the buffers and memory.                      ---                     -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                     -- #VUID-vkBindBufferMemory2-device-parameter# @device@ /must/ be a valid+                     -- 'Vulkan.Core10.Handles.Device' handle                      Device                   -> -- | @pBindInfos@ is a pointer to an array of @bindInfoCount@                      -- 'BindBufferMemoryInfo' structures describing buffers and memory to bind.                      ---                     -- @pBindInfos@ /must/ be a valid pointer to an array of @bindInfoCount@-                     -- valid 'BindBufferMemoryInfo' structures+                     -- #VUID-vkBindBufferMemory2-pBindInfos-parameter# @pBindInfos@ /must/ be a+                     -- valid pointer to an array of @bindInfoCount@ valid+                     -- 'BindBufferMemoryInfo' structures                      ("bindInfos" ::: Vector (SomeStruct BindBufferMemoryInfo))                   -> io () bindBufferMemory2 device bindInfos = liftIO . evalContT $ do@@ -146,22 +148,26 @@ -- -- == Valid Usage ----- -   If any 'BindImageMemoryInfo'::image was created with+-- -   #VUID-vkBindImageMemory2-pBindInfos-02858# If any+--     'BindImageMemoryInfo'::image was created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' --     then all planes of 'BindImageMemoryInfo'::image /must/ be bound --     individually in separate @pBindInfos@ ----- -   @pBindInfos@ /must/ not refer to the same image subresource more---     than once+-- -   #VUID-vkBindImageMemory2-pBindInfos-04006# @pBindInfos@ /must/ not+--     refer to the same image subresource more than once -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkBindImageMemory2-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pBindInfos@ /must/ be a valid pointer to an array of---     @bindInfoCount@ valid 'BindImageMemoryInfo' structures+-- -   #VUID-vkBindImageMemory2-pBindInfos-parameter# @pBindInfos@ /must/+--     be a valid pointer to an array of @bindInfoCount@ valid+--     'BindImageMemoryInfo' structures ----- -   @bindInfoCount@ /must/ be greater than @0@+-- -   #VUID-vkBindImageMemory2-bindInfoCount-arraylength# @bindInfoCount@+--     /must/ be greater than @0@ -- -- == Return Codes --@@ -202,34 +208,39 @@ -- -- == Valid Usage ----- -   @buffer@ /must/ not already be backed by a memory object+-- -   #VUID-VkBindBufferMemoryInfo-buffer-01029# @buffer@ /must/ not+--     already be backed by a memory object ----- -   @buffer@ /must/ not have been created with any sparse memory binding---     flags+-- -   #VUID-VkBindBufferMemoryInfo-buffer-01030# @buffer@ /must/ not have+--     been created with any sparse memory binding flags ----- -   @memoryOffset@ /must/ be less than the size of @memory@+-- -   #VUID-VkBindBufferMemoryInfo-memoryOffset-01031# @memoryOffset@+--     /must/ be less than the size of @memory@ ----- -   @memory@ /must/ have been allocated using one of the memory types---     allowed in the @memoryTypeBits@ member of the+-- -   #VUID-VkBindBufferMemoryInfo-memory-01035# @memory@ /must/ have been+--     allocated using one of the memory types allowed in the+--     @memoryTypeBits@ member of the --     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure --     returned from a call to --     'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements' with --     @buffer@ ----- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@---     member of the 'Vulkan.Core10.MemoryManagement.MemoryRequirements'---     structure returned from a call to+-- -   #VUID-VkBindBufferMemoryInfo-memoryOffset-01036# @memoryOffset@+--     /must/ be an integer multiple of the @alignment@ member of the+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure+--     returned from a call to --     'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements' with --     @buffer@ ----- -   The @size@ member of the+-- -   #VUID-VkBindBufferMemoryInfo-size-01037# The @size@ member of the --     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure --     returned from a call to --     'Vulkan.Core10.MemoryManagement.getBufferMemoryRequirements' with --     @buffer@ /must/ be less than or equal to the size of @memory@ minus --     @memoryOffset@ ----- -   If @buffer@ requires a dedicated allocation(as reported by+-- -   #VUID-VkBindBufferMemoryInfo-buffer-01444# If @buffer@ requires a+--     dedicated allocation(as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getBufferMemoryRequirements2' --     in --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation@@ -237,8 +248,9 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@ --     equal to @buffer@ ----- -   If the 'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when---     @memory@ was allocated included a+-- -   #VUID-VkBindBufferMemoryInfo-memory-01508# If the+--     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was+--     allocated included a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     structure in its @pNext@ chain, and --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@@@ -247,19 +259,22 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@buffer@, --     and @memoryOffset@ /must/ be zero ----- -   If buffer was created with the+-- -   #VUID-VkBindBufferMemoryInfo-None-01898# If buffer was created with+--     the --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' --     bit set, the buffer /must/ be bound to a memory object allocated --     with a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If buffer was created with the+-- -   #VUID-VkBindBufferMemoryInfo-None-01899# If buffer was created with+--     the --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' --     bit not set, the buffer /must/ not be bound to a memory object --     created with a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If @buffer@ was created with+-- -   #VUID-VkBindBufferMemoryInfo-buffer-01038# If @buffer@ was created+--     with --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@ --     equal to 'Vulkan.Core10.FundamentalTypes.TRUE', @memory@ /must/ have --     been created with@@ -267,21 +282,23 @@ --     equal to a buffer handle created with identical creation parameters --     to @buffer@ and @memoryOffset@ /must/ be zero ----- -   If the value of+-- -   #VUID-VkBindBufferMemoryInfo-memory-02726# If the value of --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     used to allocate @memory@ is not @0@, it /must/ include at least one --     of the handles set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@ --     when @buffer@ was created ----- -   If @memory@ was created by a memory import operation, that is not+-- -   #VUID-VkBindBufferMemoryInfo-memory-02985# If @memory@ was created+--     by a memory import operation, that is not --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID' --     with a non-@NULL@ @buffer@ value, the external handle type of the --     imported memory /must/ also have been set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@ --     when @buffer@ was created ----- -   If @memory@ was created with the+-- -   #VUID-VkBindBufferMemoryInfo-memory-02986# If @memory@ was created+--     with the --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID' --     memory import operation with a non-@NULL@ @buffer@ value, --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'@@ -289,7 +306,7 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryBufferCreateInfo'::@handleTypes@ --     when @buffer@ was created ----- -   If the+-- -   #VUID-VkBindBufferMemoryInfo-bufferDeviceAddress-03339# If the --     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures'::@bufferDeviceAddress@ --     feature is enabled and @buffer@ was created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT'@@ -297,7 +314,8 @@ --     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT' --     bit set ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindBufferMemoryInfo-pNext-01605# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo' --     structure, all instances of @memory@ specified by --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo'::@pDeviceIndices@@@ -305,22 +323,25 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBindBufferMemoryInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkBindBufferMemoryInfo-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindBufferMemoryDeviceGroupInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkBindBufferMemoryInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkBindBufferMemoryInfo-buffer-parameter# @buffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-VkBindBufferMemoryInfo-memory-parameter# @memory@ /must/ be a+--     valid 'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   Both of @buffer@, and @memory@ /must/ have been created, allocated,---     or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkBindBufferMemoryInfo-commonparent# Both of @buffer@, and+--     @memory@ /must/ have been created, allocated, or retrieved from the+--     same 'Vulkan.Core10.Handles.Device' -- -- = See Also --@@ -402,14 +423,17 @@ -- -- == Valid Usage ----- -   @image@ /must/ not already be backed by a memory object+-- -   #VUID-VkBindImageMemoryInfo-image-01044# @image@ /must/ not already+--     be backed by a memory object ----- -   @image@ /must/ not have been created with any sparse memory binding---     flags+-- -   #VUID-VkBindImageMemoryInfo-image-01045# @image@ /must/ not have+--     been created with any sparse memory binding flags ----- -   @memoryOffset@ /must/ be less than the size of @memory@+-- -   #VUID-VkBindImageMemoryInfo-memoryOffset-01046# @memoryOffset@+--     /must/ be less than the size of @memory@ ----- -   If @image@ requires a dedicated allocation (as reported by+-- -   #VUID-VkBindImageMemoryInfo-image-01445# If @image@ requires a+--     dedicated allocation (as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2' --     in --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements'::requiresDedicatedAllocation@@ -417,7 +441,7 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@ --     equal to @image@ ----- -   If the+-- -   #VUID-VkBindImageMemoryInfo-memory-02628# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing> --     feature is not enabled, and the --     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was@@ -430,7 +454,7 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo'::@image@ --     and @memoryOffset@ /must/ be zero ----- -   If the+-- -   #VUID-VkBindImageMemoryInfo-memory-02629# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dedicatedAllocationImageAliasing dedicated allocation image aliasing> --     feature is enabled, and the --     'Vulkan.Core10.Memory.MemoryAllocateInfo' provided when @memory@ was@@ -450,19 +474,21 @@ --     parameter of the image being bound /must/ be equal to or smaller --     than the original image for which the allocation was created ----- -   If image was created with the+-- -   #VUID-VkBindImageMemoryInfo-None-01901# If image was created with+--     the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT' --     bit set, the image /must/ be bound to a memory object allocated with --     a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If image was created with the+-- -   #VUID-VkBindImageMemoryInfo-None-01902# If image was created with+--     the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_PROTECTED_BIT' --     bit not set, the image /must/ not be bound to a memory object --     created with a memory type that reports --     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT' ----- -   If @image@ was created with+-- -   #VUID-VkBindImageMemoryInfo-image-01050# If @image@ was created with --     'Vulkan.Extensions.VK_NV_dedicated_allocation.DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@ --     equal to 'Vulkan.Core10.FundamentalTypes.TRUE', @memory@ /must/ have --     been created with@@ -470,21 +496,23 @@ --     equal to an image handle created with identical creation parameters --     to @image@ and @memoryOffset@ /must/ be zero ----- -   If the value of+-- -   #VUID-VkBindImageMemoryInfo-memory-02728# If the value of --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     used to allocate @memory@ is not @0@, it /must/ include at least one --     of the handles set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when @image@ was created ----- -   If @memory@ was created by a memory import operation, that is not+-- -   #VUID-VkBindImageMemoryInfo-memory-02989# If @memory@ was created by+--     a memory import operation, that is not --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID' --     with a non-@NULL@ @buffer@ value, the external handle type of the --     imported memory /must/ also have been set in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when @image@ was created ----- -   If @memory@ was created with the+-- -   #VUID-VkBindImageMemoryInfo-memory-02990# If @memory@ was created+--     with the --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ImportAndroidHardwareBufferInfoANDROID' --     memory import operation with a non-@NULL@ @buffer@ value, --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'@@ -492,7 +520,8 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExternalMemoryImageCreateInfo'::@handleTypes@ --     when @image@ was created ----- -   If the @pNext@ chain does not include a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01615# If the @pNext@ chain does+--     not include a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo' --     structure, @memory@ /must/ have been allocated using one of the --     memory types allowed in the @memoryTypeBits@ member of the@@ -501,7 +530,8 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2' --     with @image@ ----- -   If the @pNext@ chain does not include a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01616# If the @pNext@ chain does+--     not include a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo' --     structure, @memoryOffset@ /must/ be an integer multiple of the --     @alignment@ member of the@@ -510,7 +540,8 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2' --     with @image@ ----- -   If the @pNext@ chain does not include a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01617# If the @pNext@ chain does+--     not include a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo' --     structure, the difference of the size of @memory@ and @memoryOffset@ --     /must/ be greater than or equal to the @size@ member of the@@ -519,13 +550,15 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.getImageMemoryRequirements2' --     with the same @image@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01618# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo' --     structure, @image@ /must/ have been created with the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' --     bit set ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01619# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo' --     structure, @memory@ /must/ have been allocated using one of the --     memory types allowed in the @memoryTypeBits@ member of the@@ -540,7 +573,8 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2' --     structure’s @pNext@ chain ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01620# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo' --     structure, @memoryOffset@ /must/ be an integer multiple of the --     @alignment@ member of the@@ -555,7 +589,8 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2' --     structure’s @pNext@ chain ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01621# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo' --     structure, the difference of the size of @memory@ and @memoryOffset@ --     /must/ be greater than or equal to the @size@ member of the@@ -570,13 +605,15 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.ImageMemoryRequirementsInfo2' --     structure’s @pNext@ chain ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01626# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo' --     structure, all instances of @memory@ specified by --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pDeviceIndices@ --     /must/ have been allocated ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01627# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo' --     structure, and --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@splitInstanceBindRegionCount@@@ -584,57 +621,64 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT' --     bit set ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01628# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo' --     structure, all elements of --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pSplitInstanceBindRegions@ --     /must/ be valid rectangles contained within the dimensions of --     @image@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01629# If the @pNext@ chain+--     includes a --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo' --     structure, the union of the areas of all elements of --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo'::@pSplitInstanceBindRegions@ --     that correspond to the same instance of @image@ /must/ cover the --     entire image ----- -   If @image@ was created with a valid swapchain handle in+-- -   #VUID-VkBindImageMemoryInfo-image-01630# If @image@ was created with+--     a valid swapchain handle in --     'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR'::@swapchain@, --     then the @pNext@ chain /must/ include a --     'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR' --     structure containing the same swapchain handle ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01631# If the @pNext@ chain+--     includes a --     'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR' --     structure, @memory@ /must/ be --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If the @pNext@ chain does not include a+-- -   #VUID-VkBindImageMemoryInfo-pNext-01632# If the @pNext@ chain does+--     not include a --     'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR' --     structure, @memory@ /must/ be a valid --     'Vulkan.Core10.Handles.DeviceMemory' handle -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBindImageMemoryInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_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+-- -   #VUID-VkBindImageMemoryInfo-pNext-pNext# 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 --     'Vulkan.Core11.Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.BindImageMemoryDeviceGroupInfo', --     'Vulkan.Extensions.VK_KHR_swapchain.BindImageMemorySwapchainInfoKHR', --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.BindImagePlaneMemoryInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkBindImageMemoryInfo-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-VkBindImageMemoryInfo-image-parameter# @image@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle ----- -   Both of @image@, and @memory@ that are valid handles of non-ignored---     parameters /must/ have been created, allocated, or retrieved from---     the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkBindImageMemoryInfo-commonparent# Both of @image@, and+--     @memory@ that are valid handles of non-ignored parameters /must/+--     have been created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device' -- -- = See Also --
src/Vulkan/Core11/Promoted_From_VK_KHR_dedicated_allocation.hs view
@@ -124,7 +124,7 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMemoryDedicatedRequirements-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS' -- -- = See Also@@ -188,34 +188,40 @@ -- -- == Valid Usage ----- -   At least one of @image@ and @buffer@ /must/ be+-- -   #VUID-VkMemoryDedicatedAllocateInfo-image-01432# At least one of+--     @image@ and @buffer@ /must/ be --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the---     memory is not an imported Android Hardware Buffer,+-- -   #VUID-VkMemoryDedicatedAllocateInfo-image-02964# If @image@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and the memory is not an+--     imported Android Hardware Buffer, --     'Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@ /must/ --     equal the --     'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ of the --     image ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@---     /must/ have been created without+-- -   #VUID-VkMemoryDedicatedAllocateInfo-image-01434# If @image@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@ /must/ have been+--     created without --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT' --     set in 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the---     memory is not an imported Android Hardware Buffer,+-- -   #VUID-VkMemoryDedicatedAllocateInfo-buffer-02965# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and the memory is not an+--     imported Android Hardware Buffer, --     'Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@ /must/ --     equal the --     'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ of the --     buffer ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @buffer@ /must/ have been created without+-- -   #VUID-VkMemoryDedicatedAllocateInfo-buffer-01436# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/ have been+--     created without --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_BINDING_BIT' --     set in 'Vulkan.Core10.Buffer.BufferCreateInfo'::@flags@ ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and+-- -   #VUID-VkMemoryDedicatedAllocateInfo-image-01876# If @image@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and --     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import --     operation with handle type --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',@@ -230,7 +236,8 @@ --     and @image@ must be identical to the image associated with the --     imported memory ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and+-- -   #VUID-VkMemoryDedicatedAllocateInfo-buffer-01877# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and --     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import --     operation with handle type --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',@@ -245,7 +252,8 @@ --     and @buffer@ /must/ be identical to the buffer associated with the --     imported memory ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and+-- -   #VUID-VkMemoryDedicatedAllocateInfo-image-01878# If @image@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and --     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import --     operation with handle type --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT',@@ -253,7 +261,8 @@ --     allocation and @image@ /must/ be identical to the image associated --     with the imported memory ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and+-- -   #VUID-VkMemoryDedicatedAllocateInfo-buffer-01879# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and --     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import --     operation with handle type --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT',@@ -261,25 +270,29 @@ --     allocation and @buffer@ /must/ be identical to the buffer associated --     with the imported memory ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@---     /must/ not have been created with+-- -   #VUID-VkMemoryDedicatedAllocateInfo-image-01797# If @image@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@ /must/ not have+--     been created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' --     set in 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMemoryDedicatedAllocateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO' ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@---     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-VkMemoryDedicatedAllocateInfo-image-parameter# If @image@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkMemoryDedicatedAllocateInfo-buffer-parameter# If @buffer@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   Both of @buffer@, and @image@ that are valid handles of non-ignored---     parameters /must/ have been created, allocated, or retrieved from---     the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkMemoryDedicatedAllocateInfo-commonparent# Both of @buffer@,+--     and @image@ that are valid handles of non-ignored parameters /must/+--     have been created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device' -- -- = See Also --
src/Vulkan/Core11/Promoted_From_VK_KHR_descriptor_update_template.hs view
@@ -93,16 +93,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateDescriptorUpdateTemplate-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateDescriptorUpdateTemplate-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'DescriptorUpdateTemplateCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateDescriptorUpdateTemplate-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pDescriptorUpdateTemplate@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateDescriptorUpdateTemplate-pDescriptorUpdateTemplate-parameter#+--     @pDescriptorUpdateTemplate@ /must/ be a valid pointer to a --     'Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle -- -- == Return Codes@@ -179,28 +183,34 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00356#+--     If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @descriptorSetLayout@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDescriptorUpdateTemplate-descriptorSetLayout-00357#+--     If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @descriptorSetLayout@ was created, @pAllocator@ /must/ --     be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyDescriptorUpdateTemplate-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @descriptorUpdateTemplate@ is not+-- -   #VUID-vkDestroyDescriptorUpdateTemplate-descriptorUpdateTemplate-parameter#+--     If @descriptorUpdateTemplate@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @descriptorUpdateTemplate@ --     /must/ be a valid 'Vulkan.Core11.Handles.DescriptorUpdateTemplate' --     handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroyDescriptorUpdateTemplate-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @descriptorUpdateTemplate@ is a valid handle, it /must/ have been+-- -   #VUID-vkDestroyDescriptorUpdateTemplate-descriptorUpdateTemplate-parent#+--     If @descriptorUpdateTemplate@ is a valid handle, it /must/ have been --     created, allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -249,9 +259,9 @@ -- -- == Valid Usage ----- -   @pData@ /must/ be a valid pointer to a memory containing one or more---     valid instances of---     'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',+-- -   #VUID-vkUpdateDescriptorSetWithTemplate-pData-01685# @pData@ /must/+--     be a valid pointer to a memory containing one or more valid+--     instances of 'Vulkan.Core10.DescriptorSet.DescriptorImageInfo', --     'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or --     'Vulkan.Core10.Handles.BufferView' in a layout defined by --     @descriptorUpdateTemplate@ when it was created with@@ -259,15 +269,19 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkUpdateDescriptorSetWithTemplate-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @descriptorSet@ /must/ be a valid+-- -   #VUID-vkUpdateDescriptorSetWithTemplate-descriptorSet-parameter#+--     @descriptorSet@ /must/ be a valid --     'Vulkan.Core10.Handles.DescriptorSet' handle ----- -   @descriptorUpdateTemplate@ /must/ be a valid+-- -   #VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parameter#+--     @descriptorUpdateTemplate@ /must/ be a valid --     'Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle ----- -   @descriptorUpdateTemplate@ /must/ have been created, allocated, or+-- -   #VUID-vkUpdateDescriptorSetWithTemplate-descriptorUpdateTemplate-parent#+--     @descriptorUpdateTemplate@ /must/ have been created, allocated, or --     retrieved from @device@ -- -- == Host Synchronization@@ -390,28 +404,33 @@ -- -- == Valid Usage ----- -   @dstBinding@ /must/ be a valid binding in the descriptor set layout---     implicitly specified when using a descriptor update template to---     update descriptors+-- -   #VUID-VkDescriptorUpdateTemplateEntry-dstBinding-00354# @dstBinding@+--     /must/ be a valid binding in the descriptor set layout implicitly+--     specified when using a descriptor update template to update+--     descriptors ----- -   @dstArrayElement@ and @descriptorCount@ /must/ be less than or equal+-- -   #VUID-VkDescriptorUpdateTemplateEntry-dstArrayElement-00355#+--     @dstArrayElement@ and @descriptorCount@ /must/ be less than or equal --     to the number of array elements in the descriptor set binding --     implicitly specified when using a descriptor update template to --     update descriptors, and all applicable consecutive bindings, as --     described by --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive> ----- -   If @descriptor@ type is+-- -   #VUID-VkDescriptorUpdateTemplateEntry-descriptor-02226# If+--     @descriptor@ type is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', --     @dstArrayElement@ /must/ be an integer multiple of @4@ ----- -   If @descriptor@ type is+-- -   #VUID-VkDescriptorUpdateTemplateEntry-descriptor-02227# If+--     @descriptor@ type is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT', --     @descriptorCount@ /must/ be an integer multiple of @4@ -- -- == Valid Usage (Implicit) ----- -   @descriptorType@ /must/ be a valid+-- -   #VUID-VkDescriptorUpdateTemplateEntry-descriptorType-parameter#+--     @descriptorType@ /must/ be a valid --     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value -- -- = See Also@@ -520,22 +539,26 @@ -- -- == Valid Usage ----- -   If @templateType@ is+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00350# If+--     @templateType@ is --     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET', --     @descriptorSetLayout@ /must/ be a valid --     'Vulkan.Core10.Handles.DescriptorSetLayout' handle ----- -   If @templateType@ is+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00351# If+--     @templateType@ is --     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR', --     @pipelineBindPoint@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value ----- -   If @templateType@ is+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00352# If+--     @templateType@ is --     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR', --     @pipelineLayout@ /must/ be a valid --     'Vulkan.Core10.Handles.PipelineLayout' handle ----- -   If @templateType@ is+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-00353# If+--     @templateType@ is --     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR', --     @set@ /must/ be the unique set number in the pipeline layout that --     uses a descriptor set layout that was created with@@ -543,26 +566,33 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-pNext-pNext# @pNext@+--     /must/ be @NULL@ ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-flags-zerobitmask#+--     @flags@ /must/ be @0@ ----- -   @pDescriptorUpdateEntries@ /must/ be a valid pointer to an array of+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-pDescriptorUpdateEntries-parameter#+--     @pDescriptorUpdateEntries@ /must/ be a valid pointer to an array of --     @descriptorUpdateEntryCount@ valid 'DescriptorUpdateTemplateEntry' --     structures ----- -   @templateType@ /must/ be a valid+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-templateType-parameter#+--     @templateType@ /must/ be a valid --     'Vulkan.Core11.Enums.DescriptorUpdateTemplateType.DescriptorUpdateTemplateType' --     value ----- -   @descriptorUpdateEntryCount@ /must/ be greater than @0@+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-descriptorUpdateEntryCount-arraylength#+--     @descriptorUpdateEntryCount@ /must/ be greater than @0@ ----- -   Both of @descriptorSetLayout@, and @pipelineLayout@ that are valid---     handles of non-ignored parameters /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkDescriptorUpdateTemplateCreateInfo-commonparent# Both of+--     @descriptorSetLayout@, and @pipelineLayout@ that are valid handles+--     of non-ignored parameters /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- = See Also --
src/Vulkan/Core11/Promoted_From_VK_KHR_device_group.hs view
@@ -106,23 +106,28 @@                                   . (MonadIO io)                                  => -- | @device@ is the logical device that owns the memory.                                     ---                                    -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                    -- #VUID-vkGetDeviceGroupPeerMemoryFeatures-device-parameter# @device@+                                    -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                     Device                                  -> -- | @heapIndex@ is the index of the memory heap from which the memory is                                     -- allocated.                                     ---                                    -- @heapIndex@ /must/ be less than @memoryHeapCount@+                                    -- #VUID-vkGetDeviceGroupPeerMemoryFeatures-heapIndex-00691# @heapIndex@+                                    -- /must/ be less than @memoryHeapCount@                                     ("heapIndex" ::: Word32)                                  -> -- | @localDeviceIndex@ is the device index of the physical device that                                     -- performs the memory access.                                     --+                                    -- #VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00692#                                     -- @localDeviceIndex@ /must/ be a valid device index                                     --+                                    -- #VUID-vkGetDeviceGroupPeerMemoryFeatures-localDeviceIndex-00694#                                     -- @localDeviceIndex@ /must/ not equal @remoteDeviceIndex@                                     ("localDeviceIndex" ::: Word32)                                  -> -- | @remoteDeviceIndex@ is the device index of the physical device that the                                     -- memory is allocated for.                                     --+                                    -- #VUID-vkGetDeviceGroupPeerMemoryFeatures-remoteDeviceIndex-00693#                                     -- @remoteDeviceIndex@ /must/ be a valid device index                                     ("remoteDeviceIndex" ::: Word32)                                  -> io (("peerMemoryFeatures" ::: PeerMemoryFeatureFlags))@@ -159,28 +164,34 @@ -- -- == Valid Usage ----- -   @deviceMask@ /must/ be a valid device mask value+-- -   #VUID-vkCmdSetDeviceMask-deviceMask-00108# @deviceMask@ /must/ be a+--     valid device mask value ----- -   @deviceMask@ /must/ not be zero+-- -   #VUID-vkCmdSetDeviceMask-deviceMask-00109# @deviceMask@ /must/ not+--     be zero ----- -   @deviceMask@ /must/ not include any set bits that were not in the+-- -   #VUID-vkCmdSetDeviceMask-deviceMask-00110# @deviceMask@ /must/ not+--     include any set bits that were not in the --     'DeviceGroupCommandBufferBeginInfo'::@deviceMask@ value when the --     command buffer began recording ----- -   If 'cmdSetDeviceMask' is called inside a render pass instance,---     @deviceMask@ /must/ not include any set bits that were not in the+-- -   #VUID-vkCmdSetDeviceMask-deviceMask-00111# If 'cmdSetDeviceMask' is+--     called inside a render pass instance, @deviceMask@ /must/ not+--     include any set bits that were not in the --     'DeviceGroupRenderPassBeginInfo'::@deviceMask@ value when the render --     pass instance began recording -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdSetDeviceMask-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetDeviceMask-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetDeviceMask-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, compute, or transfer --     operations --@@ -242,7 +253,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdDispatchBase-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -251,20 +263,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdDispatchBase-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdDispatchBase-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDispatchBase-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -273,7 +288,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDispatchBase-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -287,53 +303,58 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdDispatchBase-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a+-- -   #VUID-vkCmdDispatchBase-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a --     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set --     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create --     the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a+-- -   #VUID-vkCmdDispatchBase-None-02698# For each push constant that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a --     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push --     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdDispatchBase-None-02699# Descriptors in each bound+--     descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdDispatchBase-None-02700# A valid pipeline /must/ be bound+--     to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdDispatchBase-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDispatchBase-None-02859# There /must/ not have been any+--     calls to dynamic state setting commands for any state not specified+--     as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to+--     the pipeline bind point used by this command, since that pipeline+--     was bound+--+-- -   #VUID-vkCmdDispatchBase-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -345,21 +366,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDispatchBase-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDispatchBase-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdDispatchBase-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -367,7 +390,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdDispatchBase-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -375,46 +398,52 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource+-- -   #VUID-vkCmdDispatchBase-commandBuffer-02707# If @commandBuffer@ is+--     an unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDispatchBase-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDispatchBase-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDispatchBase-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDispatchBase-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDispatchBase-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDispatchBase-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdDispatchBase-sparseImageInt64Atomics-04474# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -423,7 +452,7 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdDispatchBase-sparseImageInt64Atomics-04475# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -432,43 +461,53 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   @baseGroupX@ /must/ be less than+-- -   #VUID-vkCmdDispatchBase-baseGroupX-00421# @baseGroupX@ /must/ be+--     less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0] ----- -   @baseGroupX@ /must/ be less than+-- -   #VUID-vkCmdDispatchBase-baseGroupX-00422# @baseGroupX@ /must/ be+--     less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1] ----- -   @baseGroupZ@ /must/ be less than+-- -   #VUID-vkCmdDispatchBase-baseGroupZ-00423# @baseGroupZ@ /must/ be+--     less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2] ----- -   @groupCountX@ /must/ be less than or equal to+-- -   #VUID-vkCmdDispatchBase-groupCountX-00424# @groupCountX@ /must/ be+--     less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0] --     minus @baseGroupX@ ----- -   @groupCountY@ /must/ be less than or equal to+-- -   #VUID-vkCmdDispatchBase-groupCountY-00425# @groupCountY@ /must/ be+--     less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1] --     minus @baseGroupY@ ----- -   @groupCountZ@ /must/ be less than or equal to+-- -   #VUID-vkCmdDispatchBase-groupCountZ-00426# @groupCountZ@ /must/ be+--     less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2] --     minus @baseGroupZ@ ----- -   If any of @baseGroupX@, @baseGroupY@, or @baseGroupZ@ are not zero,---     then the bound compute pipeline /must/ have been created with the+-- -   #VUID-vkCmdDispatchBase-baseGroupX-00427# If any of @baseGroupX@,+--     @baseGroupY@, or @baseGroupZ@ are not zero, then the bound compute+--     pipeline /must/ have been created with the --     'PIPELINE_CREATE_DISPATCH_BASE' flag -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdDispatchBase-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDispatchBase-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDispatchBase-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support compute operations ----- -   This command /must/ only be called outside of a render pass instance+-- -   #VUID-vkCmdDispatchBase-renderpass# This command /must/ only be+--     called outside of a render pass instance -- -- == Host Synchronization --@@ -558,20 +597,21 @@ -- -- == Valid Usage ----- -   If+-- -   #VUID-VkMemoryAllocateFlagsInfo-deviceMask-00675# If --     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT' --     is set, @deviceMask@ /must/ be a valid device mask ----- -   If+-- -   #VUID-VkMemoryAllocateFlagsInfo-deviceMask-00676# If --     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_MASK_BIT' --     is set, @deviceMask@ /must/ not be zero -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMemoryAllocateFlagsInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO' ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkMemoryAllocateFlagsInfo-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MemoryAllocateFlagBits' --     values --@@ -665,22 +705,28 @@ -- -- == Valid Usage ----- -   @deviceMask@ /must/ be a valid device mask value+-- -   #VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00905#+--     @deviceMask@ /must/ be a valid device mask value ----- -   @deviceMask@ /must/ not be zero+-- -   #VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00906#+--     @deviceMask@ /must/ not be zero ----- -   @deviceMask@ /must/ be a subset of the command buffer’s initial+-- -   #VUID-VkDeviceGroupRenderPassBeginInfo-deviceMask-00907#+--     @deviceMask@ /must/ be a subset of the command buffer’s initial --     device mask ----- -   @deviceRenderAreaCount@ /must/ either be zero or equal to the number+-- -   #VUID-VkDeviceGroupRenderPassBeginInfo-deviceRenderAreaCount-00908#+--     @deviceRenderAreaCount@ /must/ either be zero or equal to the number --     of physical devices in the logical device -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDeviceGroupRenderPassBeginInfo-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO' ----- -   If @deviceRenderAreaCount@ is not @0@, @pDeviceRenderAreas@ /must/+-- -   #VUID-VkDeviceGroupRenderPassBeginInfo-pDeviceRenderAreas-parameter#+--     If @deviceRenderAreaCount@ is not @0@, @pDeviceRenderAreas@ /must/ --     be a valid pointer to an array of @deviceRenderAreaCount@ --     'Vulkan.Core10.FundamentalTypes.Rect2D' structures --@@ -759,9 +805,11 @@ data DeviceGroupCommandBufferBeginInfo = DeviceGroupCommandBufferBeginInfo   { -- | @deviceMask@ is the initial value of the command buffer’s device mask.     ---    -- @deviceMask@ /must/ be a valid device mask value+    -- #VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00106# @deviceMask@+    -- /must/ be a valid device mask value     ---    -- @deviceMask@ /must/ not be zero+    -- #VUID-VkDeviceGroupCommandBufferBeginInfo-deviceMask-00107# @deviceMask@+    -- /must/ not be zero     deviceMask :: Word32 }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -811,35 +859,42 @@ -- -- == Valid Usage ----- -   @waitSemaphoreCount@ /must/ equal+-- -   #VUID-VkDeviceGroupSubmitInfo-waitSemaphoreCount-00082#+--     @waitSemaphoreCount@ /must/ equal --     'Vulkan.Core10.Queue.SubmitInfo'::@waitSemaphoreCount@ ----- -   @commandBufferCount@ /must/ equal+-- -   #VUID-VkDeviceGroupSubmitInfo-commandBufferCount-00083#+--     @commandBufferCount@ /must/ equal --     'Vulkan.Core10.Queue.SubmitInfo'::@commandBufferCount@ ----- -   @signalSemaphoreCount@ /must/ equal+-- -   #VUID-VkDeviceGroupSubmitInfo-signalSemaphoreCount-00084#+--     @signalSemaphoreCount@ /must/ equal --     'Vulkan.Core10.Queue.SubmitInfo'::@signalSemaphoreCount@ ----- -   All elements of @pWaitSemaphoreDeviceIndices@ and+-- -   #VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-00085# All+--     elements of @pWaitSemaphoreDeviceIndices@ and --     @pSignalSemaphoreDeviceIndices@ /must/ be valid device indices ----- -   All elements of @pCommandBufferDeviceMasks@ /must/ be valid device---     masks+-- -   #VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-00086# All+--     elements of @pCommandBufferDeviceMasks@ /must/ be valid device masks -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDeviceGroupSubmitInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO' ----- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphoreDeviceIndices@+-- -   #VUID-VkDeviceGroupSubmitInfo-pWaitSemaphoreDeviceIndices-parameter#+--     If @waitSemaphoreCount@ is not @0@, @pWaitSemaphoreDeviceIndices@ --     /must/ be a valid pointer to an array of @waitSemaphoreCount@ --     @uint32_t@ values ----- -   If @commandBufferCount@ is not @0@, @pCommandBufferDeviceMasks@+-- -   #VUID-VkDeviceGroupSubmitInfo-pCommandBufferDeviceMasks-parameter#+--     If @commandBufferCount@ is not @0@, @pCommandBufferDeviceMasks@ --     /must/ be a valid pointer to an array of @commandBufferCount@ --     @uint32_t@ values ----- -   If @signalSemaphoreCount@ is not @0@,+-- -   #VUID-VkDeviceGroupSubmitInfo-pSignalSemaphoreDeviceIndices-parameter#+--     If @signalSemaphoreCount@ is not @0@, --     @pSignalSemaphoreDeviceIndices@ /must/ be a valid pointer to an --     array of @signalSemaphoreCount@ @uint32_t@ values --@@ -940,15 +995,17 @@ -- -- == Valid Usage ----- -   @resourceDeviceIndex@ and @memoryDeviceIndex@ /must/ both be valid+-- -   #VUID-VkDeviceGroupBindSparseInfo-resourceDeviceIndex-01118#+--     @resourceDeviceIndex@ and @memoryDeviceIndex@ /must/ both be valid --     device indices ----- -   Each memory allocation bound in this batch /must/ have allocated an+-- -   #VUID-VkDeviceGroupBindSparseInfo-memoryDeviceIndex-01119# Each+--     memory allocation bound in this batch /must/ have allocated an --     instance for @memoryDeviceIndex@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDeviceGroupBindSparseInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO' -- -- = See Also
src/Vulkan/Core11/Promoted_From_VK_KHR_device_groupAndVK_KHR_bind_memory2.hs view
@@ -81,17 +81,21 @@ -- -- == Valid Usage ----- -   @deviceIndexCount@ /must/ either be zero or equal to the number of+-- -   #VUID-VkBindBufferMemoryDeviceGroupInfo-deviceIndexCount-01606#+--     @deviceIndexCount@ /must/ either be zero or equal to the number of --     physical devices in the logical device ----- -   All elements of @pDeviceIndices@ /must/ be valid device indices+-- -   #VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-01607# All+--     elements of @pDeviceIndices@ /must/ be valid device indices -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBindBufferMemoryDeviceGroupInfo-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO' ----- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid+-- -   #VUID-VkBindBufferMemoryDeviceGroupInfo-pDeviceIndices-parameter# If+--     @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid --     pointer to an array of @deviceIndexCount@ @uint32_t@ values -- -- = See Also@@ -204,51 +208,61 @@ -- -- == Valid Usage ----- -   At least one of @deviceIndexCount@ and---     @splitInstanceBindRegionCount@ /must/ be zero+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01633# At+--     least one of @deviceIndexCount@ and @splitInstanceBindRegionCount@+--     /must/ be zero ----- -   @deviceIndexCount@ /must/ either be zero or equal to the number of+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-deviceIndexCount-01634#+--     @deviceIndexCount@ /must/ either be zero or equal to the number of --     physical devices in the logical device ----- -   All elements of @pDeviceIndices@ /must/ be valid device indices+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-01635# All+--     elements of @pDeviceIndices@ /must/ be valid device indices ----- -   @splitInstanceBindRegionCount@ /must/ either be zero or equal to the+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-splitInstanceBindRegionCount-01636#+--     @splitInstanceBindRegionCount@ /must/ either be zero or equal to the --     number of physical devices in the logical device squared ----- -   Elements of @pSplitInstanceBindRegions@ that correspond to the same+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-01637#+--     Elements of @pSplitInstanceBindRegions@ that correspond to the same --     instance of an image /must/ not overlap ----- -   The @offset.x@ member of any element of @pSplitInstanceBindRegions@---     /must/ be a multiple of the sparse image block width+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-offset-01638# The @offset.x@+--     member of any element of @pSplitInstanceBindRegions@ /must/ be a+--     multiple of the sparse image block width --     ('Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'::@imageGranularity.width@) --     of all non-metadata aspects of the image ----- -   The @offset.y@ member of any element of @pSplitInstanceBindRegions@---     /must/ be a multiple of the sparse image block height+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-offset-01639# The @offset.y@+--     member of any element of @pSplitInstanceBindRegions@ /must/ be a+--     multiple of the sparse image block height --     ('Vulkan.Core10.SparseResourceMemoryManagement.SparseImageFormatProperties'::@imageGranularity.height@) --     of all non-metadata aspects of the image ----- -   The @extent.width@ member of any element of---     @pSplitInstanceBindRegions@ /must/ either be a multiple of the---     sparse image block width of all non-metadata aspects of the image,---     or else @extent.width@ + @offset.x@ /must/ equal the width of the---     image subresource+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-extent-01640# The+--     @extent.width@ member of any element of @pSplitInstanceBindRegions@+--     /must/ either be a multiple of the sparse image block width of all+--     non-metadata aspects of the image, or else @extent.width@ ++--     @offset.x@ /must/ equal the width of the image subresource ----- -   The @extent.height@ member of any element of---     @pSplitInstanceBindRegions@ /must/ either be a multiple of the---     sparse image block height of all non-metadata aspects of the image,---     or else @extent.height@ + @offset.y@ /must/ equal the width of the---     image subresource+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-extent-01641# The+--     @extent.height@ member of any element of @pSplitInstanceBindRegions@+--     /must/ either be a multiple of the sparse image block height of all+--     non-metadata aspects of the image, or else @extent.height@ ++--     @offset.y@ /must/ equal the width of the image subresource -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO' ----- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-pDeviceIndices-parameter# If+--     @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid --     pointer to an array of @deviceIndexCount@ @uint32_t@ values ----- -   If @splitInstanceBindRegionCount@ is not @0@,+-- -   #VUID-VkBindImageMemoryDeviceGroupInfo-pSplitInstanceBindRegions-parameter#+--     If @splitInstanceBindRegionCount@ is not @0@, --     @pSplitInstanceBindRegions@ /must/ be a valid pointer to an array of --     @splitInstanceBindRegionCount@ --     'Vulkan.Core10.FundamentalTypes.Rect2D' structures
src/Vulkan/Core11/Promoted_From_VK_KHR_device_group_creation.hs view
@@ -100,12 +100,15 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkEnumeratePhysicalDeviceGroups-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pPhysicalDeviceGroupCount@ /must/ be a valid pointer to a+-- -   #VUID-vkEnumeratePhysicalDeviceGroups-pPhysicalDeviceGroupCount-parameter#+--     @pPhysicalDeviceGroupCount@ /must/ be a valid pointer to a --     @uint32_t@ value ----- -   If the value referenced by @pPhysicalDeviceGroupCount@ is not @0@,+-- -   #VUID-vkEnumeratePhysicalDeviceGroups-pPhysicalDeviceGroupProperties-parameter#+--     If the value referenced by @pPhysicalDeviceGroupCount@ is not @0@, --     and @pPhysicalDeviceGroupProperties@ is not @NULL@, --     @pPhysicalDeviceGroupProperties@ /must/ be a valid pointer to an --     array of @pPhysicalDeviceGroupCount@ 'PhysicalDeviceGroupProperties'@@ -258,21 +261,25 @@ -- -- == Valid Usage ----- -   Each element of @pPhysicalDevices@ /must/ be unique+-- -   #VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00375# Each+--     element of @pPhysicalDevices@ /must/ be unique ----- -   All elements of @pPhysicalDevices@ /must/ be in the same device---     group as enumerated by 'enumeratePhysicalDeviceGroups'+-- -   #VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-00376# All+--     elements of @pPhysicalDevices@ /must/ be in the same device group as+--     enumerated by 'enumeratePhysicalDeviceGroups' ----- -   If @physicalDeviceCount@ is not @0@, the @physicalDevice@ parameter---     of 'Vulkan.Core10.Device.createDevice' /must/ be an element of+-- -   #VUID-VkDeviceGroupDeviceCreateInfo-physicalDeviceCount-00377# If+--     @physicalDeviceCount@ is not @0@, the @physicalDevice@ parameter of+--     'Vulkan.Core10.Device.createDevice' /must/ be an element of --     @pPhysicalDevices@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDeviceGroupDeviceCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO' ----- -   If @physicalDeviceCount@ is not @0@, @pPhysicalDevices@ /must/ be a+-- -   #VUID-VkDeviceGroupDeviceCreateInfo-pPhysicalDevices-parameter# If+--     @physicalDeviceCount@ is not @0@, @pPhysicalDevices@ /must/ be a --     valid pointer to an array of @physicalDeviceCount@ valid --     'Vulkan.Core10.Handles.PhysicalDevice' handles --
src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence.hs view
@@ -32,16 +32,17 @@ -- -- == Valid Usage ----- -   The bits in @handleTypes@ /must/ be supported and compatible, as---     reported by+-- -   #VUID-VkExportFenceCreateInfo-handleTypes-01446# The bits in+--     @handleTypes@ /must/ be supported and compatible, as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkExportFenceCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO' ----- -   @handleTypes@ /must/ be a valid combination of+-- -   #VUID-VkExportFenceCreateInfo-handleTypes-parameter# @handleTypes@+--     /must/ be a valid combination of --     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits' --     values --
src/Vulkan/Core11/Promoted_From_VK_KHR_external_fence_capabilities.hs view
@@ -72,6 +72,7 @@                                          => -- | @physicalDevice@ is the physical device from which to query the fence                                             -- capabilities.                                             --+                                            -- #VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter#                                             -- @physicalDevice@ /must/ be a valid                                             -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                             PhysicalDevice@@ -79,6 +80,7 @@                                             -- structure describing the parameters that would be consumed by                                             -- 'Vulkan.Core10.Fence.createFence'.                                             --+                                            -- #VUID-vkGetPhysicalDeviceExternalFenceProperties-pExternalFenceInfo-parameter#                                             -- @pExternalFenceInfo@ /must/ be a valid pointer to a valid                                             -- 'PhysicalDeviceExternalFenceInfo' structure                                             PhysicalDeviceExternalFenceInfo@@ -125,6 +127,7 @@     -- value indicating an external fence handle type for which capabilities     -- will be returned.     --+    -- #VUID-VkPhysicalDeviceExternalFenceInfo-handleType-parameter#     -- @handleType@ /must/ be a valid     -- 'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits'     -- value
src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory.hs view
@@ -55,10 +55,12 @@     -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'     -- specifying one or more external memory handle types.     --+    -- #VUID-VkExternalMemoryImageCreateInfo-handleTypes-parameter#     -- @handleTypes@ /must/ be a valid combination of     -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'     -- values     --+    -- #VUID-VkExternalMemoryImageCreateInfo-handleTypes-requiredbitmask#     -- @handleTypes@ /must/ not be @0@     handleTypes :: ExternalMemoryHandleTypeFlags }   deriving (Typeable, Eq)@@ -121,6 +123,7 @@     -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'     -- specifying one or more external memory handle types.     --+    -- #VUID-VkExternalMemoryBufferCreateInfo-handleTypes-parameter#     -- @handleTypes@ /must/ be a valid combination of     -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'     -- values@@ -167,18 +170,19 @@ -- -- == Valid Usage ----- -   The bits in @handleTypes@ /must/ be supported and compatible, as---     reported by+-- -   #VUID-VkExportMemoryAllocateInfo-handleTypes-00656# The bits in+--     @handleTypes@ /must/ be supported and compatible, as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties' --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkExportMemoryAllocateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO' ----- -   @handleTypes@ /must/ be a valid combination of+-- -   #VUID-VkExportMemoryAllocateInfo-handleTypes-parameter#+--     @handleTypes@ /must/ be a valid combination of --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits' --     values --
src/Vulkan/Core11/Promoted_From_VK_KHR_external_memory_capabilities.hs view
@@ -96,6 +96,7 @@                                           => -- | @physicalDevice@ is the physical device from which to query the buffer                                              -- capabilities.                                              --+                                             -- #VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter#                                              -- @physicalDevice@ /must/ be a valid                                              -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                              PhysicalDevice@@ -103,6 +104,7 @@                                              -- 'PhysicalDeviceExternalBufferInfo' structure describing the parameters                                              -- that would be consumed by 'Vulkan.Core10.Buffer.createBuffer'.                                              --+                                             -- #VUID-vkGetPhysicalDeviceExternalBufferProperties-pExternalBufferInfo-parameter#                                              -- @pExternalBufferInfo@ /must/ be a valid pointer to a valid                                              -- 'PhysicalDeviceExternalBufferInfo' structure                                              PhysicalDeviceExternalBufferInfo@@ -215,10 +217,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceExternalImageFormatInfo-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO' ----- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid+-- -   #VUID-VkPhysicalDeviceExternalImageFormatInfo-handleType-parameter#+--     If @handleType@ is not @0@, @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits' --     value --@@ -334,7 +338,8 @@     -- describing additional parameters of the buffer, corresponding to     -- 'Vulkan.Core10.Buffer.BufferCreateInfo'::@flags@.     ---    -- @flags@ /must/ be a valid combination of+    -- #VUID-VkPhysicalDeviceExternalBufferInfo-flags-parameter# @flags@ /must/+    -- be a valid combination of     -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BufferCreateFlagBits' values     flags :: BufferCreateFlags   , -- | @usage@ is a bitmask of@@ -342,16 +347,19 @@     -- the intended usage of the buffer, corresponding to     -- 'Vulkan.Core10.Buffer.BufferCreateInfo'::@usage@.     ---    -- @usage@ /must/ be a valid combination of+    -- #VUID-VkPhysicalDeviceExternalBufferInfo-usage-parameter# @usage@ /must/+    -- be a valid combination of     -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits' values     ---    -- @usage@ /must/ not be @0@+    -- #VUID-VkPhysicalDeviceExternalBufferInfo-usage-requiredbitmask# @usage@+    -- /must/ not be @0@     usage :: BufferUsageFlags   , -- | @handleType@ is a     -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'     -- value specifying the memory handle type that will be used with the     -- memory associated with the buffer.     --+    -- #VUID-VkPhysicalDeviceExternalBufferInfo-handleType-parameter#     -- @handleType@ /must/ be a valid     -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'     -- value@@ -559,7 +567,7 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceIDProperties-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES' -- -- = See Also
src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore.hs view
@@ -32,16 +32,17 @@ -- -- == Valid Usage ----- -   The bits in @handleTypes@ /must/ be supported and compatible, as---     reported by+-- -   #VUID-VkExportSemaphoreCreateInfo-handleTypes-01124# The bits in+--     @handleTypes@ /must/ be supported and compatible, as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkExportSemaphoreCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO' ----- -   @handleTypes@ /must/ be a valid combination of+-- -   #VUID-VkExportSemaphoreCreateInfo-handleTypes-parameter#+--     @handleTypes@ /must/ be a valid combination of --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits' --     values --
src/Vulkan/Core11/Promoted_From_VK_KHR_external_semaphore_capabilities.hs view
@@ -86,6 +86,7 @@                                              => -- | @physicalDevice@ is the physical device from which to query the                                                 -- semaphore capabilities.                                                 --+                                                -- #VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter#                                                 -- @physicalDevice@ /must/ be a valid                                                 -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                                 PhysicalDevice@@ -94,6 +95,7 @@                                                 -- parameters that would be consumed by                                                 -- 'Vulkan.Core10.QueueSemaphore.createSemaphore'.                                                 --+                                                -- #VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-pExternalSemaphoreInfo-parameter#                                                 -- @pExternalSemaphoreInfo@ /must/ be a valid pointer to a valid                                                 -- 'PhysicalDeviceExternalSemaphoreInfo' structure                                                 (PhysicalDeviceExternalSemaphoreInfo a)@@ -115,16 +117,19 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceExternalSemaphoreInfo-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkPhysicalDeviceExternalSemaphoreInfo-pNext-pNext# @pNext@+--     /must/ be @NULL@ or a pointer to a valid instance of --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkPhysicalDeviceExternalSemaphoreInfo-sType-unique# The+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkPhysicalDeviceExternalSemaphoreInfo-handleType-parameter#+--     @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits' --     value --
src/Vulkan/Core11/Promoted_From_VK_KHR_get_memory_requirements2.hs view
@@ -97,13 +97,14 @@                               . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io)                              => -- | @device@ is the logical device that owns the buffer.                                 ---                                -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                -- #VUID-vkGetBufferMemoryRequirements2-device-parameter# @device@ /must/+                                -- be a valid 'Vulkan.Core10.Handles.Device' handle                                 Device                              -> -- | @pInfo@ is a pointer to a 'BufferMemoryRequirementsInfo2' structure                                 -- containing parameters required for the memory requirements query.                                 ---                                -- @pInfo@ /must/ be a valid pointer to a valid-                                -- 'BufferMemoryRequirementsInfo2' structure+                                -- #VUID-vkGetBufferMemoryRequirements2-pInfo-parameter# @pInfo@ /must/ be+                                -- a valid pointer to a valid 'BufferMemoryRequirementsInfo2' structure                                 BufferMemoryRequirementsInfo2                              -> io (MemoryRequirements2 a) getBufferMemoryRequirements2 device info = liftIO . evalContT $ do@@ -138,13 +139,14 @@                              . (Extendss ImageMemoryRequirementsInfo2 a, Extendss MemoryRequirements2 b, PokeChain a, PokeChain b, PeekChain b, MonadIO io)                             => -- | @device@ is the logical device that owns the image.                                ---                               -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                               -- #VUID-vkGetImageMemoryRequirements2-device-parameter# @device@ /must/ be+                               -- a valid 'Vulkan.Core10.Handles.Device' handle                                Device                             -> -- | @pInfo@ is a pointer to a 'ImageMemoryRequirementsInfo2' structure                                -- containing parameters required for the memory requirements query.                                ---                               -- @pInfo@ /must/ be a valid pointer to a valid-                               -- 'ImageMemoryRequirementsInfo2' structure+                               -- #VUID-vkGetImageMemoryRequirements2-pInfo-parameter# @pInfo@ /must/ be a+                               -- valid pointer to a valid 'ImageMemoryRequirementsInfo2' structure                                (ImageMemoryRequirementsInfo2 a)                             -> io (MemoryRequirements2 b) getImageMemoryRequirements2 device info = liftIO . evalContT $ do@@ -171,15 +173,19 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetImageSparseMemoryRequirements2-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetImageSparseMemoryRequirements2-pInfo-parameter# @pInfo@+--     /must/ be a valid pointer to a valid --     'ImageSparseMemoryRequirementsInfo2' structure ----- -   @pSparseMemoryRequirementCount@ /must/ be a valid pointer to a+-- -   #VUID-vkGetImageSparseMemoryRequirements2-pSparseMemoryRequirementCount-parameter#+--     @pSparseMemoryRequirementCount@ /must/ be a valid pointer to a --     @uint32_t@ value ----- -   If the value referenced by @pSparseMemoryRequirementCount@ is not+-- -   #VUID-vkGetImageSparseMemoryRequirements2-pSparseMemoryRequirements-parameter#+--     If the value referenced by @pSparseMemoryRequirementCount@ is not --     @0@, and @pSparseMemoryRequirements@ is not @NULL@, --     @pSparseMemoryRequirements@ /must/ be a valid pointer to an array of --     @pSparseMemoryRequirementCount@ 'SparseImageMemoryRequirements2'@@ -228,7 +234,8 @@ data BufferMemoryRequirementsInfo2 = BufferMemoryRequirementsInfo2   { -- | @buffer@ is the buffer to query.     ---    -- @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+    -- #VUID-VkBufferMemoryRequirementsInfo2-buffer-parameter# @buffer@ /must/+    -- be a valid 'Vulkan.Core10.Handles.Buffer' handle     buffer :: Buffer }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -272,14 +279,16 @@ -- -- == Valid Usage ----- -   If @image@ was created with a /multi-planar/ format and the+-- -   #VUID-VkImageMemoryRequirementsInfo2-image-01589# If @image@ was+--     created with a /multi-planar/ format and the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' --     flag, there /must/ be a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo' --     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2' --     structure ----- -   If @image@ was created with+-- -   #VUID-VkImageMemoryRequirementsInfo2-image-02279# If @image@ was+--     created with --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' --     and with --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',@@ -288,37 +297,41 @@ --     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2' --     structure ----- -   If @image@ was not created with the+-- -   #VUID-VkImageMemoryRequirementsInfo2-image-01590# If @image@ was not+--     created with the --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' --     flag, there /must/ not be a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo' --     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2' --     structure ----- -   If @image@ was created with a single-plane format and with any---     @tiling@ other than+-- -   #VUID-VkImageMemoryRequirementsInfo2-image-02280# If @image@ was+--     created with a single-plane format and with any @tiling@ other than --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT', --     then there /must/ not be a --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo' --     included in the @pNext@ chain of the 'ImageMemoryRequirementsInfo2' --     structure ----- -   If @image@ was created with the+-- -   #VUID-VkImageMemoryRequirementsInfo2-image-01897# If @image@ was+--     created with the --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID' --     external memory handle type, then @image@ /must/ be bound to memory -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageMemoryRequirementsInfo2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkImageMemoryRequirementsInfo2-pNext-pNext# @pNext@ /must/ be+--     @NULL@ or a pointer to a valid instance of --     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.ImagePlaneMemoryRequirementsInfo' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkImageMemoryRequirementsInfo2-sType-unique# The @sType@ value+--     of each struct in the @pNext@ chain /must/ be unique ----- -   @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+-- -   #VUID-VkImageMemoryRequirementsInfo2-image-parameter# @image@ /must/+--     be a valid 'Vulkan.Core10.Handles.Image' handle -- -- = See Also --@@ -391,7 +404,8 @@ data ImageSparseMemoryRequirementsInfo2 = ImageSparseMemoryRequirementsInfo2   { -- | @image@ is the image to query.     ---    -- @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+    -- #VUID-VkImageSparseMemoryRequirementsInfo2-image-parameter# @image@+    -- /must/ be a valid 'Vulkan.Core10.Handles.Image' handle     image :: Image }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -435,14 +449,15 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMemoryRequirements2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkMemoryRequirements2-pNext-pNext# @pNext@ /must/ be @NULL@ or+--     a pointer to a valid instance of --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedRequirements' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkMemoryRequirements2-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique -- -- = See Also --
src/Vulkan/Core11/Promoted_From_VK_KHR_get_physical_device_properties2.hs view
@@ -125,6 +125,8 @@ import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapPropertiesEXT) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PhysicalDeviceFragmentShadingRateEnumsPropertiesNV) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRateFeaturesKHR) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRatePropertiesKHR) import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)@@ -262,6 +264,7 @@                            => -- | @physicalDevice@ is the physical device from which to query the                               -- supported features.                               --+                              -- #VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter#                               -- @physicalDevice@ /must/ be a valid                               -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                               PhysicalDevice@@ -303,6 +306,7 @@                              => -- | @physicalDevice@ is the handle to the physical device whose properties                                 -- will be queried.                                 --+                                -- #VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter#                                 -- @physicalDevice@ /must/ be a valid                                 -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                 PhysicalDevice@@ -346,12 +350,14 @@                                    => -- | @physicalDevice@ is the physical device from which to query the format                                       -- properties.                                       --+                                      -- #VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter#                                       -- @physicalDevice@ /must/ be a valid                                       -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                       PhysicalDevice                                    -> -- | @format@ is the format whose properties are queried.                                       ---                                      -- @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+                                      -- #VUID-vkGetPhysicalDeviceFormatProperties2-format-parameter# @format@+                                      -- /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value                                       Format                                    -> io (FormatProperties2 a) getPhysicalDeviceFormatProperties2 physicalDevice format = liftIO . evalContT $ do@@ -384,7 +390,8 @@ -- -- == Valid Usage ----- -   If the @pNext@ chain of @pImageFormatProperties@ includes a+-- -   #VUID-vkGetPhysicalDeviceImageFormatProperties2-pNext-01868# If the+--     @pNext@ chain of @pImageFormatProperties@ includes a --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferUsageANDROID' --     structure, the @pNext@ chain of @pImageFormatInfo@ /must/ include a --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo'@@ -393,13 +400,16 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pImageFormatInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatInfo-parameter#+--     @pImageFormatInfo@ /must/ be a valid pointer to a valid --     'PhysicalDeviceImageFormatInfo2' structure ----- -   @pImageFormatProperties@ /must/ be a valid pointer to a+-- -   #VUID-vkGetPhysicalDeviceImageFormatProperties2-pImageFormatProperties-parameter#+--     @pImageFormatProperties@ /must/ be a valid pointer to a --     'ImageFormatProperties2' structure -- -- == Return Codes@@ -462,13 +472,16 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceQueueFamilyProperties2-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a+-- -   #VUID-vkGetPhysicalDeviceQueueFamilyProperties2-pQueueFamilyPropertyCount-parameter#+--     @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a --     @uint32_t@ value ----- -   If the value referenced by @pQueueFamilyPropertyCount@ is not @0@,+-- -   #VUID-vkGetPhysicalDeviceQueueFamilyProperties2-pQueueFamilyProperties-parameter#+--     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@ --     'QueueFamilyProperties2' structures@@ -526,6 +539,7 @@                                     . (Extendss PhysicalDeviceMemoryProperties2 a, PokeChain a, PeekChain a, MonadIO io)                                    => -- | @physicalDevice@ is the handle to the device to query.                                       --+                                      -- #VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter#                                       -- @physicalDevice@ /must/ be a valid                                       -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                       PhysicalDevice@@ -560,15 +574,19 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pFormatInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pFormatInfo-parameter#+--     @pFormatInfo@ /must/ be a valid pointer to a valid --     'PhysicalDeviceSparseImageFormatInfo2' structure ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-pProperties-parameter#+--     If the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'SparseImageFormatProperties2' --     structures@@ -648,6 +666,7 @@   getNext PhysicalDeviceFeatures2{..} = next   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceFeatures2 e => b) -> Maybe b   extends _ f+    | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = Just f     | Just Refl <- eqT @e @PhysicalDeviceShaderTerminateInvocationFeaturesKHR = Just f     | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateFeaturesKHR = Just f     | Just Refl <- eqT @e @PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = Just f@@ -764,12 +783,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceProperties2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2' ----- -   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+-- -   #VUID-VkPhysicalDeviceProperties2-pNext-pNext# 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 --     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedPropertiesEXT', --     'Vulkan.Extensions.VK_EXT_conservative_rasterization.PhysicalDeviceConservativeRasterizationPropertiesEXT', --     'Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixPropertiesNV',@@ -783,6 +802,7 @@ --     'Vulkan.Core12.Promoted_From_VK_KHR_shader_float_controls.PhysicalDeviceFloatControlsProperties', --     'Vulkan.Extensions.VK_EXT_fragment_density_map2.PhysicalDeviceFragmentDensityMap2PropertiesEXT', --     'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapPropertiesEXT',+--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsPropertiesNV', --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRatePropertiesKHR', --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties', --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockPropertiesEXT',@@ -815,8 +835,8 @@ --     'Vulkan.Core12.PhysicalDeviceVulkan11Properties', or --     'Vulkan.Core12.PhysicalDeviceVulkan12Properties' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkPhysicalDeviceProperties2-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique -- -- = See Also --@@ -846,6 +866,7 @@   getNext PhysicalDeviceProperties2{..} = next   extends :: forall e b proxy. Typeable e => proxy e -> (Extends PhysicalDeviceProperties2 e => b) -> Maybe b   extends _ f+    | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRateEnumsPropertiesNV = Just f     | Just Refl <- eqT @e @PhysicalDeviceFragmentShadingRatePropertiesKHR = Just f     | Just Refl <- eqT @e @PhysicalDevicePortabilitySubsetPropertiesKHR = Just f     | Just Refl <- eqT @e @PhysicalDeviceRobustness2PropertiesEXT = Just f@@ -927,14 +948,15 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFormatProperties2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FORMAT_PROPERTIES_2' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkFormatProperties2-pNext-pNext# @pNext@ /must/ be @NULL@ or a+--     pointer to a valid instance of --     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesListEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkFormatProperties2-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique -- -- = See Also --@@ -1017,12 +1039,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageFormatProperties2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2' ----- -   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+-- -   #VUID-VkImageFormatProperties2-pNext-pNext# 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 --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.AndroidHardwareBufferUsageANDROID', --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties', --     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT',@@ -1030,8 +1052,8 @@ --     or --     'Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.TextureLODGatherFormatPropertiesAMD' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkImageFormatProperties2-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique -- -- = See Also --@@ -1112,12 +1134,13 @@ -- -- == Valid Usage ----- -   @tiling@ /must/ be+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02249# @tiling@ /must/+--     be --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT' --     if and only if the @pNext@ chain includes --     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.PhysicalDeviceImageDrmFormatModifierInfoEXT' ----- -   If @tiling@ is+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-tiling-02313# If @tiling@ is --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT' --     and @flags@ contains --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_MUTABLE_FORMAT_BIT',@@ -1127,12 +1150,13 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2' ----- -   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+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-pNext-pNext# 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 --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo', --     'Vulkan.Core12.Promoted_From_VK_EXT_separate_stencil_usage.ImageStencilUsageCreateInfo', --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceExternalImageFormatInfo',@@ -1140,23 +1164,28 @@ --     or --     'Vulkan.Extensions.VK_EXT_filter_cubic.PhysicalDeviceImageViewImageFormatInfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-format-parameter# @format@+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value ----- -   @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType'---     value+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-type-parameter# @type@ /must/+--     be a valid 'Vulkan.Core10.Enums.ImageType.ImageType' value ----- -   @tiling@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-tiling-parameter# @tiling@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageTiling.ImageTiling'+--     value ----- -   @usage@ /must/ be a valid combination of+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-usage-parameter# @usage@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values ----- -   @usage@ /must/ not be @0@+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-usage-requiredbitmask#+--     @usage@ /must/ not be @0@ ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkPhysicalDeviceImageFormatInfo2-flags-parameter# @flags@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values -- -- = See Also@@ -1268,14 +1297,15 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkQueueFamilyProperties2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkQueueFamilyProperties2-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Extensions.VK_NV_device_diagnostic_checkpoints.QueueFamilyCheckpointPropertiesNV' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkQueueFamilyProperties2-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique -- -- = See Also --@@ -1343,14 +1373,16 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceMemoryProperties2-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkPhysicalDeviceMemoryProperties2-pNext-pNext# @pNext@ /must/+--     be @NULL@ or a pointer to a valid instance of --     'Vulkan.Extensions.VK_EXT_memory_budget.PhysicalDeviceMemoryBudgetPropertiesEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkPhysicalDeviceMemoryProperties2-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique -- -- = See Also --@@ -1480,16 +1512,19 @@ data PhysicalDeviceSparseImageFormatInfo2 = PhysicalDeviceSparseImageFormatInfo2   { -- | @format@ is the image format.     ---    -- @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+    -- #VUID-VkPhysicalDeviceSparseImageFormatInfo2-format-parameter# @format@+    -- /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value     format :: Format   , -- | @type@ is the dimensionality of image.     ---    -- @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType' value+    -- #VUID-VkPhysicalDeviceSparseImageFormatInfo2-type-parameter# @type@+    -- /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType' value     type' :: ImageType   , -- | @samples@ is the number of samples per texel as defined in     -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'.     ---    -- @samples@ /must/ be a bit value that is set in+    -- #VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-01095# @samples@+    -- /must/ be a bit value that is set in     -- 'Vulkan.Core10.DeviceInitialization.ImageFormatProperties'::@sampleCounts@     -- returned by     -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties'@@ -1497,20 +1532,23 @@     -- command and @flags@ equal to the value that is set in     -- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ when the image is created     --+    -- #VUID-VkPhysicalDeviceSparseImageFormatInfo2-samples-parameter#     -- @samples@ /must/ be a valid     -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value     samples :: SampleCountFlagBits   , -- | @usage@ is a bitmask describing the intended usage of the image.     ---    -- @usage@ /must/ be a valid combination of+    -- #VUID-VkPhysicalDeviceSparseImageFormatInfo2-usage-parameter# @usage@+    -- /must/ be a valid combination of     -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values     --+    -- #VUID-VkPhysicalDeviceSparseImageFormatInfo2-usage-requiredbitmask#     -- @usage@ /must/ not be @0@     usage :: ImageUsageFlags   , -- | @tiling@ is the tiling arrangement of the texel blocks in memory.     ---    -- @tiling@ /must/ be a valid 'Vulkan.Core10.Enums.ImageTiling.ImageTiling'-    -- value+    -- #VUID-VkPhysicalDeviceSparseImageFormatInfo2-tiling-parameter# @tiling@+    -- /must/ be a valid 'Vulkan.Core10.Enums.ImageTiling.ImageTiling' value     tiling :: ImageTiling   }   deriving (Typeable, Eq)
src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance1.hs view
@@ -83,15 +83,16 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkTrimCommandPool-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @commandPool@ /must/ be a valid 'Vulkan.Core10.Handles.CommandPool'---     handle+-- -   #VUID-vkTrimCommandPool-commandPool-parameter# @commandPool@ /must/+--     be a valid 'Vulkan.Core10.Handles.CommandPool' handle ----- -   @flags@ /must/ be @0@+-- -   #VUID-vkTrimCommandPool-flags-zerobitmask# @flags@ /must/ be @0@ ----- -   @commandPool@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkTrimCommandPool-commandPool-parent# @commandPool@ /must/+--     have been created, allocated, or retrieved from @device@ -- -- == Host Synchronization --
src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance2.hs view
@@ -71,15 +71,19 @@   , -- | @aspectMask@ is a mask of which aspect(s) /can/ be accessed within the     -- specified subpass.     ---    -- @aspectMask@ /must/ not include+    -- #VUID-VkInputAttachmentAspectReference-aspectMask-01964# @aspectMask@+    -- /must/ not include     -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT'     ---    -- @aspectMask@ /must/ not include @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@-    -- for any index @i@+    -- #VUID-VkInputAttachmentAspectReference-aspectMask-02250# @aspectMask@+    -- /must/ not include @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any+    -- index @i@     --+    -- #VUID-VkInputAttachmentAspectReference-aspectMask-parameter#     -- @aspectMask@ /must/ be a valid combination of     -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' values     --+    -- #VUID-VkInputAttachmentAspectReference-aspectMask-requiredbitmask#     -- @aspectMask@ /must/ not be @0@     aspectMask :: ImageAspectFlags   }@@ -147,6 +151,7 @@     -- which aspect(s) /can/ be accessed for a given input attachment within a     -- given subpass.     --+    -- #VUID-VkRenderPassInputAttachmentAspectCreateInfo-pAspectReferences-parameter#     -- @pAspectReferences@ /must/ be a valid pointer to an array of     -- @aspectReferenceCount@ valid 'InputAttachmentAspectReference' structures     aspectReferences :: Vector InputAttachmentAspectReference }@@ -211,7 +216,7 @@ -- 'Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevicePointClippingProperties = PhysicalDevicePointClippingProperties-  { -- | @pointClippingBehavior@ is a+  { -- | #extension-limits-pointClipping# @pointClippingBehavior@ is a     -- 'Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior' value     -- specifying the point clipping behavior supported by the implementation.     pointClippingBehavior :: PointClippingBehavior }@@ -274,10 +279,12 @@     -- See 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' for a     -- description of the supported bits.     ---    -- @usage@ /must/ be a valid combination of+    -- #VUID-VkImageViewUsageCreateInfo-usage-parameter# @usage@ /must/ be a+    -- valid combination of     -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values     ---    -- @usage@ /must/ not be @0@+    -- #VUID-VkImageViewUsageCreateInfo-usage-requiredbitmask# @usage@ /must/+    -- not be @0@     usage :: ImageUsageFlags }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -340,6 +347,7 @@     -- 'Vulkan.Core11.Enums.TessellationDomainOrigin.TessellationDomainOrigin'     -- value controlling the origin of the tessellation domain space.     --+    -- #VUID-VkPipelineTessellationDomainOriginStateCreateInfo-domainOrigin-parameter#     -- @domainOrigin@ /must/ be a valid     -- 'Vulkan.Core11.Enums.TessellationDomainOrigin.TessellationDomainOrigin'     -- value
src/Vulkan/Core11/Promoted_From_VK_KHR_maintenance3.hs view
@@ -111,12 +111,14 @@                               => -- | @device@ is the logical device that would create the descriptor set                                  -- layout.                                  ---                                 -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                 -- #VUID-vkGetDescriptorSetLayoutSupport-device-parameter# @device@ /must/+                                 -- be a valid 'Vulkan.Core10.Handles.Device' handle                                  Device                               -> -- | @pCreateInfo@ is a pointer to a                                  -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo' structure                                  -- specifying the state of the descriptor set layout object.                                  --+                                 -- #VUID-vkGetDescriptorSetLayoutSupport-pCreateInfo-parameter#                                  -- @pCreateInfo@ /must/ be a valid pointer to a valid                                  -- 'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo' structure                                  (DescriptorSetLayoutCreateInfo a)@@ -155,16 +157,16 @@ -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceMaintenance3Properties = PhysicalDeviceMaintenance3Properties-  { -- | @maxPerSetDescriptors@ is a maximum number of descriptors (summed over-    -- all descriptor types) in a single descriptor set that is guaranteed to-    -- satisfy any implementation-dependent constraints on the size of a-    -- descriptor set itself. Applications /can/ query whether a descriptor set-    -- that goes beyond this limit is supported using-    -- 'getDescriptorSetLayoutSupport'.+  { -- | #extension-limits-maxPerSetDescriptors# @maxPerSetDescriptors@ is a+    -- maximum number of descriptors (summed over all descriptor types) in a+    -- single descriptor set that is guaranteed to satisfy any+    -- implementation-dependent constraints on the size of a descriptor set+    -- itself. Applications /can/ query whether a descriptor set that goes+    -- beyond this limit is supported using 'getDescriptorSetLayoutSupport'.     maxPerSetDescriptors :: Word32-  , -- | @maxMemoryAllocationSize@ is the maximum size of a memory allocation-    -- that /can/ be created, even if there is more space available in the-    -- heap.+  , -- | #extension-limits-maxMemoryAllocationSize# @maxMemoryAllocationSize@ is+    -- the maximum size of a memory allocation that /can/ be created, even if+    -- there is more space available in the heap.     maxMemoryAllocationSize :: DeviceSize   }   deriving (Typeable, Eq)@@ -220,14 +222,15 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDescriptorSetLayoutSupport-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkDescriptorSetLayoutSupport-pNext-pNext# @pNext@ /must/ be+--     @NULL@ or a pointer to a valid instance of --     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.DescriptorSetVariableDescriptorCountLayoutSupport' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkDescriptorSetLayoutSupport-sType-unique# The @sType@ value+--     of each struct in the @pNext@ chain /must/ be unique -- -- = See Also --
src/Vulkan/Core11/Promoted_From_VK_KHR_multiview.hs view
@@ -53,19 +53,22 @@ -- -- = Description ----- -   @multiview@ specifies whether the implementation supports multiview---     rendering within a render pass. If this feature is not enabled, the---     view mask of each subpass /must/ always be zero.+-- -   #extension-features-multiview# @multiview@ specifies whether the+--     implementation supports multiview rendering within a render pass. If+--     this feature is not enabled, the view mask of each subpass /must/+--     always be zero. ----- -   @multiviewGeometryShader@ specifies whether the implementation---     supports multiview rendering within a render pass, with+-- -   #extension-features-multiview-gs# @multiviewGeometryShader@+--     specifies whether the implementation supports multiview rendering+--     within a render pass, with --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry geometry shaders>. --     If this feature is not enabled, then a pipeline compiled against a --     subpass with a non-zero view mask /must/ not include a geometry --     shader. ----- -   @multiviewTessellationShader@ specifies whether the implementation---     supports multiview rendering within a render pass, with+-- -   #extension-features-multiview-tess# @multiviewTessellationShader@+--     specifies whether the implementation supports multiview rendering+--     within a render pass, with --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation tessellation shaders>. --     If this feature is not enabled, then a pipeline compiled against a --     subpass with a non-zero view mask /must/ not include any@@ -80,15 +83,18 @@ -- -- == Valid Usage ----- -   If @multiviewGeometryShader@ is enabled then @multiview@ /must/ also+-- -   #VUID-VkPhysicalDeviceMultiviewFeatures-multiviewGeometryShader-00580#+--     If @multiviewGeometryShader@ is enabled then @multiview@ /must/ also --     be enabled ----- -   If @multiviewTessellationShader@ is enabled then @multiview@ /must/+-- -   #VUID-VkPhysicalDeviceMultiviewFeatures-multiviewTessellationShader-00581#+--     If @multiviewTessellationShader@ is enabled then @multiview@ /must/ --     also be enabled -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceMultiviewFeatures-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES' -- -- = See Also@@ -170,12 +176,13 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceMultiviewProperties = PhysicalDeviceMultiviewProperties-  { -- | @maxMultiviewViewCount@ is one greater than the maximum view index that-    -- /can/ be used in a subpass.+  { -- | #extension-limits-maxMultiviewViewCount# @maxMultiviewViewCount@ is one+    -- greater than the maximum view index that /can/ be used in a subpass.     maxMultiviewViewCount :: Word32-  , -- | @maxMultiviewInstanceIndex@ is the maximum valid value of instance index-    -- allowed to be generated by a drawing command recorded within a subpass-    -- of a multiview render pass instance.+  , -- | #extension-limits-maxMultiviewInstanceIndex# @maxMultiviewInstanceIndex@+    -- is the maximum valid value of instance index allowed to be generated by+    -- a drawing command recorded within a subpass of a multiview render pass+    -- instance.     maxMultiviewInstanceIndex :: Word32   }   deriving (Typeable, Eq)@@ -311,21 +318,25 @@ -- -- == Valid Usage ----- -   Each view index /must/ not be set in more than one element of+-- -   #VUID-VkRenderPassMultiviewCreateInfo-pCorrelationMasks-00841# Each+--     view index /must/ not be set in more than one element of --     @pCorrelationMasks@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRenderPassMultiviewCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO' ----- -   If @subpassCount@ is not @0@, @pViewMasks@ /must/ be a valid pointer---     to an array of @subpassCount@ @uint32_t@ values+-- -   #VUID-VkRenderPassMultiviewCreateInfo-pViewMasks-parameter# If+--     @subpassCount@ is not @0@, @pViewMasks@ /must/ be a valid pointer to+--     an array of @subpassCount@ @uint32_t@ values ----- -   If @dependencyCount@ is not @0@, @pViewOffsets@ /must/ be a valid+-- -   #VUID-VkRenderPassMultiviewCreateInfo-pViewOffsets-parameter# If+--     @dependencyCount@ is not @0@, @pViewOffsets@ /must/ be a valid --     pointer to an array of @dependencyCount@ @int32_t@ values ----- -   If @correlationMaskCount@ is not @0@, @pCorrelationMasks@ /must/ be+-- -   #VUID-VkRenderPassMultiviewCreateInfo-pCorrelationMasks-parameter#+--     If @correlationMaskCount@ is not @0@, @pCorrelationMasks@ /must/ be --     a valid pointer to an array of @correlationMaskCount@ @uint32_t@ --     values --
src/Vulkan/Core11/Promoted_From_VK_KHR_sampler_ycbcr_conversion.hs view
@@ -132,22 +132,26 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCreateSamplerYcbcrConversion-None-01648# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-samplerYcbcrConversion sampler Y′CBCR conversion feature> --     /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateSamplerYcbcrConversion-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateSamplerYcbcrConversion-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'SamplerYcbcrConversionCreateInfo' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateSamplerYcbcrConversion-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pYcbcrConversion@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateSamplerYcbcrConversion-pYcbcrConversion-parameter#+--     @pYcbcrConversion@ /must/ be a valid pointer to a --     'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle -- -- == Return Codes@@ -221,17 +225,21 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroySamplerYcbcrConversion-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @ycbcrConversion@ is not---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @ycbcrConversion@ /must/---     be a valid 'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle+-- -   #VUID-vkDestroySamplerYcbcrConversion-ycbcrConversion-parameter# If+--     @ycbcrConversion@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+--     @ycbcrConversion@ /must/ be a valid+--     'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroySamplerYcbcrConversion-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @ycbcrConversion@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkDestroySamplerYcbcrConversion-ycbcrConversion-parent# If+--     @ycbcrConversion@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -279,8 +287,8 @@   { -- | @conversion@ is a 'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle     -- created with 'createSamplerYcbcrConversion'.     ---    -- @conversion@ /must/ be a valid-    -- 'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle+    -- #VUID-VkSamplerYcbcrConversionInfo-conversion-parameter# @conversion@+    -- /must/ be a valid 'Vulkan.Core11.Handles.SamplerYcbcrConversion' handle     conversion :: SamplerYcbcrConversion }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -349,21 +357,23 @@ -- -- == Valid Usage ----- -   If an external format conversion is being created, @format@ /must/---     be 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-format-01904# If an+--     external format conversion is being created, @format@ /must/ be+--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' ----- -   If an external format conversion is not being created, @format@---     /must/ represent unsigned normalized values (i.e. the format must be---     a @UNORM@ format)+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-format-04061# If an+--     external format conversion is not being created, @format@ /must/+--     represent unsigned normalized values (i.e. the format must be a+--     @UNORM@ format) ----- -   The+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-format-01650# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     of the sampler Y′CBCR conversion /must/ support --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT' --     or --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT' ----- -   If the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01651# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     of the sampler Y′CBCR conversion do not support --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT',@@ -372,7 +382,7 @@ --     the corresponding channels are --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction downsampled> ----- -   If the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-01652# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     of the sampler Y′CBCR conversion do not support --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT',@@ -381,32 +391,38 @@ --     corresponding channels are --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-chroma-reconstruction downsampled> ----- -   If the format has a @_422@ or @_420@ suffix, then @components.g@---     /must/ be the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-components-02581# If the+--     format has a @_422@ or @_420@ suffix, then @components.g@ /must/ be+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle> ----- -   If the format has a @_422@ or @_420@ suffix, then @components.a@---     /must/ be the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-components-02582# If the+--     format has a @_422@ or @_420@ suffix, then @components.a@ /must/ be+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle>, --     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ONE', or --     'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_ZERO' ----- -   If the format has a @_422@ or @_420@ suffix, then @components.r@---     /must/ be the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-components-02583# If the+--     format has a @_422@ or @_420@ suffix, then @components.r@ /must/ be+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle> --     or 'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_B' ----- -   If the format has a @_422@ or @_420@ suffix, then @components.b@---     /must/ be the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-components-02584# If the+--     format has a @_422@ or @_420@ suffix, then @components.b@ /must/ be+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle> --     or 'Vulkan.Core10.Enums.ComponentSwizzle.COMPONENT_SWIZZLE_R' ----- -   If the format has a @_422@ or @_420@ suffix, and if either---     @components.r@ or @components.b@ is the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-components-02585# If the+--     format has a @_422@ or @_420@ suffix, and if either @components.r@+--     or @components.b@ is the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-views-identity-mappings identity swizzle>, --     both values /must/ be the identity swizzle ----- -   If @ycbcrModel@ is not+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-01655# If+--     @ycbcrModel@ is not --     'Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY', --     then @components.r@, @components.g@, and @components.b@ /must/ --     correspond to channels of the @format@; that is, @components.r@,@@ -417,20 +433,22 @@ --     consequence of --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba conversion to RGBA> ----- -   If @ycbcrRange@ is+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-02748# If+--     @ycbcrRange@ is --     'Vulkan.Core11.Enums.SamplerYcbcrRange.SAMPLER_YCBCR_RANGE_ITU_NARROW' --     then the R, G and B channels obtained by applying the @component@ --     swizzle to @format@ /must/ each have a bit-depth greater than or --     equal to 8 ----- -   If the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-forceExplicitReconstruction-01656#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     of the sampler Y′CBCR conversion do not support --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT' --     @forceExplicitReconstruction@ /must/ be --     'Vulkan.Core10.FundamentalTypes.FALSE' ----- -   If the+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-01657# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     of the sampler Y′CBCR conversion do not support --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT',@@ -439,34 +457,43 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-pNext-pNext# @pNext@ /must/+--     be @NULL@ or a pointer to a valid instance of --     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-format-parameter# @format@+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value ----- -   @ycbcrModel@ /must/ be a valid+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrModel-parameter#+--     @ycbcrModel@ /must/ be a valid --     'Vulkan.Core11.Enums.SamplerYcbcrModelConversion.SamplerYcbcrModelConversion' --     value ----- -   @ycbcrRange@ /must/ be a valid+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-ycbcrRange-parameter#+--     @ycbcrRange@ /must/ be a valid --     'Vulkan.Core11.Enums.SamplerYcbcrRange.SamplerYcbcrRange' value ----- -   @components@ /must/ be a valid+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-components-parameter#+--     @components@ /must/ be a valid --     'Vulkan.Core10.ImageView.ComponentMapping' structure ----- -   @xChromaOffset@ /must/ be a valid+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-xChromaOffset-parameter#+--     @xChromaOffset@ /must/ be a valid --     'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation' value ----- -   @yChromaOffset@ /must/ be a valid+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-yChromaOffset-parameter#+--     @yChromaOffset@ /must/ be a valid --     'Vulkan.Core11.Enums.ChromaLocation.ChromaLocation' value ----- -   @chromaFilter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter'+-- -   #VUID-VkSamplerYcbcrConversionCreateInfo-chromaFilter-parameter#+--     @chromaFilter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter' --     value -- -- If @chromaFilter@ is 'Vulkan.Core10.Enums.Filter.FILTER_NEAREST', chroma@@ -603,8 +630,8 @@ -- -- == Valid Usage ----- -   If the image’s @tiling@ is---     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or+-- -   #VUID-VkBindImagePlaneMemoryInfo-planeAspect-02283# If the image’s+--     @tiling@ is 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then --     @planeAspect@ /must/ be a single valid /format plane/ for the image --     (that is, for a two-plane image @planeAspect@ /must/ be@@ -617,7 +644,8 @@ --     or --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT') ----- -   If the image’s @tiling@ is+-- -   #VUID-VkBindImagePlaneMemoryInfo-planeAspect-02284# If the image’s+--     @tiling@ is --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT', --     then @planeAspect@ /must/ be a single valid /memory plane/ for the --     image (that is, @aspectMask@ /must/ specify a plane index that is@@ -628,10 +656,11 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBindImagePlaneMemoryInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO' ----- -   @planeAspect@ /must/ be a valid+-- -   #VUID-VkBindImagePlaneMemoryInfo-planeAspect-parameter#+--     @planeAspect@ /must/ be a valid --     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' value -- -- = See Also@@ -684,7 +713,8 @@ -- -- == Valid Usage ----- -   If the image’s @tiling@ is+-- -   #VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02281# If the+--     image’s @tiling@ is --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then --     @planeAspect@ /must/ be a single valid /format plane/ for the image@@ -698,7 +728,8 @@ --     or --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT') ----- -   If the image’s @tiling@ is+-- -   #VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-02282# If the+--     image’s @tiling@ is --     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT', --     then @planeAspect@ /must/ be a single valid /memory plane/ for the --     image (that is, @aspectMask@ /must/ specify a plane index that is@@ -709,10 +740,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImagePlaneMemoryRequirementsInfo-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO' ----- -   @planeAspect@ /must/ be a valid+-- -   #VUID-VkImagePlaneMemoryRequirementsInfo-planeAspect-parameter#+--     @planeAspect@ /must/ be a valid --     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' value -- -- = See Also@@ -775,7 +808,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceSamplerYcbcrConversionFeatures = PhysicalDeviceSamplerYcbcrConversionFeatures-  { -- | @samplerYcbcrConversion@ specifies whether the implementation supports+  { -- | #extension-features-samplerYcbcrConversion# @samplerYcbcrConversion@+    -- specifies whether the implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.     -- If @samplerYcbcrConversion@ is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- sampler Y′CBCR conversion is not supported, and samplers using sampler
src/Vulkan/Core11/Promoted_From_VK_KHR_shader_draw_parameters.hs view
@@ -49,8 +49,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderDrawParametersFeatures = PhysicalDeviceShaderDrawParametersFeatures-  { -- | @shaderDrawParameters@ specifies whether shader draw parameters are-    -- supported.+  { -- | #extension-features-shaderDrawParameters# @shaderDrawParameters@+    -- specifies whether shader draw parameters are supported.     shaderDrawParameters :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Core11/Promoted_From_VK_KHR_variable_pointers.hs view
@@ -41,16 +41,17 @@ -- -- = Description ----- -   @variablePointersStorageBuffer@ specifies whether the implementation+-- -   #extension-features-variablePointersStorageBuffer#+--     @variablePointersStorageBuffer@ specifies whether the implementation --     supports the SPIR-V @VariablePointersStorageBuffer@ capability. When --     this feature is not enabled, shader modules /must/ not declare the --     @SPV_KHR_variable_pointers@ extension or the --     @VariablePointersStorageBuffer@ capability. ----- -   @variablePointers@ specifies whether the implementation supports the---     SPIR-V @VariablePointers@ capability. When this feature is not---     enabled, shader modules /must/ not declare the @VariablePointers@---     capability.+-- -   #extension-features-variablePointers# @variablePointers@ specifies+--     whether the implementation supports the SPIR-V @VariablePointers@+--     capability. When this feature is not enabled, shader modules /must/+--     not declare the @VariablePointers@ capability. -- -- If the 'PhysicalDeviceVariablePointersFeatures' structure is included in -- the @pNext@ chain of@@ -62,12 +63,14 @@ -- -- == Valid Usage ----- -   If @variablePointers@ is enabled then+-- -   #VUID-VkPhysicalDeviceVariablePointersFeatures-variablePointers-01431#+--     If @variablePointers@ is enabled then --     @variablePointersStorageBuffer@ /must/ also be enabled -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceVariablePointersFeatures-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES' -- -- = See Also
src/Vulkan/Core12.hs view
@@ -131,15 +131,16 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceVulkan11Features = PhysicalDeviceVulkan11Features-  { -- | @storageBuffer16BitAccess@ specifies whether objects in the-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the-    -- @Block@ decoration /can/ have 16-bit integer and 16-bit floating-point-    -- members. If this feature is not enabled, 16-bit integer or 16-bit-    -- floating-point members /must/ not be used in such objects. This also-    -- specifies whether shader modules /can/ declare the+  { -- | #features-storageBuffer16BitAccess# @storageBuffer16BitAccess@ specifies+    -- whether objects in the @StorageBuffer@ or @PhysicalStorageBuffer@+    -- storage class with the @Block@ decoration /can/ have 16-bit integer and+    -- 16-bit floating-point members. If this feature is not enabled, 16-bit+    -- integer or 16-bit floating-point members /must/ not be used in such+    -- objects. This also specifies whether shader modules /can/ declare the     -- @StorageBuffer16BitAccess@ capability.     storageBuffer16BitAccess :: Bool-  , -- | @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the+  , -- | #features-uniformAndStorageBuffer16BitAccess#+    -- @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the     -- @Uniform@ storage class with the @Block@ decoration and in the     -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same     -- decoration /can/ have 16-bit integer and 16-bit floating-point members.@@ -148,57 +149,62 @@     -- shader modules /can/ declare the @UniformAndStorageBuffer16BitAccess@     -- capability.     uniformAndStorageBuffer16BitAccess :: Bool-  , -- | @storagePushConstant16@ specifies whether objects in the @PushConstant@-    -- storage class /can/ have 16-bit integer and 16-bit floating-point-    -- members. If this feature is not enabled, 16-bit integer or-    -- floating-point members /must/ not be used in such objects. This also-    -- specifies whether shader modules /can/ declare the-    -- @StoragePushConstant16@ capability.+  , -- | #features-storagePushConstant16# @storagePushConstant16@ specifies+    -- whether objects in the @PushConstant@ storage class /can/ have 16-bit+    -- integer and 16-bit floating-point members. If this feature is not+    -- enabled, 16-bit integer or floating-point members /must/ not be used in+    -- such objects. This also specifies whether shader modules /can/ declare+    -- the @StoragePushConstant16@ capability.     storagePushConstant16 :: Bool-  , -- | @storageInputOutput16@ specifies whether objects in the @Input@ and-    -- @Output@ storage classes /can/ have 16-bit integer and 16-bit-    -- floating-point members. If this feature is not enabled, 16-bit integer-    -- or 16-bit floating-point members /must/ not be used in such objects.-    -- This also specifies whether shader modules /can/ declare the-    -- @StorageInputOutput16@ capability.+  , -- | #features-storageInputOutput16# @storageInputOutput16@ specifies whether+    -- objects in the @Input@ and @Output@ storage classes /can/ have 16-bit+    -- integer and 16-bit floating-point members. If this feature is not+    -- enabled, 16-bit integer or 16-bit floating-point members /must/ not be+    -- used in such objects. This also specifies whether shader modules /can/+    -- declare the @StorageInputOutput16@ capability.     storageInputOutput16 :: Bool-  , -- | @multiview@ specifies whether the implementation supports multiview-    -- rendering within a render pass. If this feature is not enabled, the view-    -- mask of each subpass /must/ always be zero.+  , -- | #features-multiview# @multiview@ specifies whether the implementation+    -- supports multiview rendering within a render pass. If this feature is+    -- not enabled, the view mask of each subpass /must/ always be zero.     multiview :: Bool-  , -- | @multiviewGeometryShader@ specifies whether the implementation supports-    -- multiview rendering within a render pass, with+  , -- | #features-multiview-gs# @multiviewGeometryShader@ specifies whether the+    -- implementation supports multiview rendering within a render pass, with     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry geometry shaders>.     -- If this feature is not enabled, then a pipeline compiled against a     -- subpass with a non-zero view mask /must/ not include a geometry shader.     multiviewGeometryShader :: Bool-  , -- | @multiviewTessellationShader@ specifies whether the implementation-    -- supports multiview rendering within a render pass, with+  , -- | #features-multiview-tess# @multiviewTessellationShader@ specifies+    -- whether the implementation supports multiview rendering within a render+    -- pass, with     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation tessellation shaders>.     -- If this feature is not enabled, then a pipeline compiled against a     -- subpass with a non-zero view mask /must/ not include any tessellation     -- shaders.     multiviewTessellationShader :: Bool-  , -- | @variablePointersStorageBuffer@ specifies whether the implementation-    -- supports the SPIR-V @VariablePointersStorageBuffer@ capability. When-    -- this feature is not enabled, shader modules /must/ not declare the+  , -- | #features-variablePointersStorageBuffer# @variablePointersStorageBuffer@+    -- specifies whether the implementation supports the SPIR-V+    -- @VariablePointersStorageBuffer@ capability. When this feature is not+    -- enabled, shader modules /must/ not declare the     -- @SPV_KHR_variable_pointers@ extension or the     -- @VariablePointersStorageBuffer@ capability.     variablePointersStorageBuffer :: Bool-  , -- | @variablePointers@ specifies whether the implementation supports the-    -- SPIR-V @VariablePointers@ capability. When this feature is not enabled,-    -- shader modules /must/ not declare the @VariablePointers@ capability.+  , -- | #features-variablePointers# @variablePointers@ specifies whether the+    -- implementation supports the SPIR-V @VariablePointers@ capability. When+    -- this feature is not enabled, shader modules /must/ not declare the+    -- @VariablePointers@ capability.     variablePointers :: Bool-  , -- | @protectedMemory@ specifies whether protected memory is supported.+  , -- | #features-protectedMemory# @protectedMemory@ specifies whether protected+    -- memory is supported.     protectedMemory :: Bool-  , -- | @samplerYcbcrConversion@ specifies whether the implementation supports+  , -- | #features-samplerYcbcrConversion# @samplerYcbcrConversion@ specifies+    -- whether the implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>.     -- If @samplerYcbcrConversion@ is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- sampler Y′CBCR conversion is not supported, and samplers using sampler     -- Y′CBCR conversion /must/ not be used.     samplerYcbcrConversion :: Bool-  , -- | @shaderDrawParameters@ specifies whether shader draw parameters are-    -- supported.+  , -- | #features-shaderDrawParameters# @shaderDrawParameters@ specifies whether+    -- shader draw parameters are supported.     shaderDrawParameters :: Bool   }   deriving (Typeable, Eq)@@ -329,15 +335,16 @@     -- LUID and @deviceNodeMask@ contains a valid node mask, and     -- 'Vulkan.Core10.FundamentalTypes.FALSE' if they do not.     deviceLUIDValid :: Bool-  , -- | @subgroupSize@ is the default number of invocations in each subgroup.-    -- @subgroupSize@ is at least 1 if any of the physical device’s queues-    -- support 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+  , -- | #limits-subgroup-size# @subgroupSize@ is the default number of+    -- invocations in each subgroup. @subgroupSize@ is at least 1 if any of the+    -- physical device’s queues support+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'. @subgroupSize@ is     -- a power-of-two.     subgroupSize :: Word32-  , -- | @subgroupSupportedStages@ is a bitfield of-    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' describing-    -- the shader stages that+  , -- | #limits-subgroupSupportedStages# @subgroupSupportedStages@ is a bitfield+    -- of 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits'+    -- describing the shader stages that     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>     -- with     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>@@ -358,21 +365,23 @@     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'.     subgroupSupportedOperations :: SubgroupFeatureFlags-  , -- | @subgroupQuadOperationsInAllStages@ is a boolean specifying whether+  , -- | #limits-subgroupQuadOperationsInAllStages#+    -- @subgroupQuadOperationsInAllStages@ is a boolean specifying whether     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-quad-operations quad group operations>     -- are available in all stages, or are restricted to fragment and compute     -- stages.     subgroupQuadOperationsInAllStages :: Bool-  , -- | @pointClippingBehavior@ is a+  , -- | #limits-pointClipping# @pointClippingBehavior@ is a     -- 'Vulkan.Core11.Enums.PointClippingBehavior.PointClippingBehavior' value     -- specifying the point clipping behavior supported by the implementation.     pointClippingBehavior :: PointClippingBehavior-  , -- | @maxMultiviewViewCount@ is one greater than the maximum view index that-    -- /can/ be used in a subpass.+  , -- | #limits-maxMultiviewViewCount# @maxMultiviewViewCount@ is one greater+    -- than the maximum view index that /can/ be used in a subpass.     maxMultiviewViewCount :: Word32-  , -- | @maxMultiviewInstanceIndex@ is the maximum valid value of instance index-    -- allowed to be generated by a drawing command recorded within a subpass-    -- of a multiview render pass instance.+  , -- | #limits-maxMultiviewInstanceIndex# @maxMultiviewInstanceIndex@ is the+    -- maximum valid value of instance index allowed to be generated by a+    -- drawing command recorded within a subpass of a multiview render pass+    -- instance.     maxMultiviewInstanceIndex :: Word32   , -- | @protectedNoFault@ specifies the behavior of the implementation when     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-protected-access-rules protected memory access rules>@@ -380,16 +389,17 @@     -- 'Vulkan.Core10.FundamentalTypes.TRUE', breaking those rules will not     -- result in process termination or device loss.     protectedNoFault :: Bool-  , -- | @maxPerSetDescriptors@ is a maximum number of descriptors (summed over-    -- all descriptor types) in a single descriptor set that is guaranteed to-    -- satisfy any implementation-dependent constraints on the size of a-    -- descriptor set itself. Applications /can/ query whether a descriptor set-    -- that goes beyond this limit is supported using+  , -- | #limits-maxPerSetDescriptors# @maxPerSetDescriptors@ is a maximum number+    -- of descriptors (summed over all descriptor types) in a single descriptor+    -- set that is guaranteed to satisfy any implementation-dependent+    -- constraints on the size of a descriptor set itself. Applications /can/+    -- query whether a descriptor set that goes beyond this limit is supported+    -- using     -- 'Vulkan.Core11.Promoted_From_VK_KHR_maintenance3.getDescriptorSetLayoutSupport'.     maxPerSetDescriptors :: Word32-  , -- | @maxMemoryAllocationSize@ is the maximum size of a memory allocation-    -- that /can/ be created, even if there is more space available in the-    -- heap.+  , -- | #limits-maxMemoryAllocationSize# @maxMemoryAllocationSize@ is the+    -- maximum size of a memory allocation that /can/ be created, even if there+    -- is more space available in the heap.     maxMemoryAllocationSize :: DeviceSize   }   deriving (Typeable)@@ -496,29 +506,31 @@ -- -- = Description ----- -   @samplerMirrorClampToEdge@ indicates whether the implementation---     supports the+-- -   #features-samplerMirrorClampToEdge# @samplerMirrorClampToEdge@+--     indicates whether the implementation supports the --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE' --     sampler address mode. If this feature is not enabled, the --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE' --     sampler address mode /must/ not be used. ----- -   @drawIndirectCount@ indicates whether the implementation supports---     the+-- -   #features-drawIndirectCount# @drawIndirectCount@ indicates whether+--     the implementation supports the --     'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndirectCount' --     and --     'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.cmdDrawIndexedIndirectCount' --     functions. If this feature is not enabled, these functions /must/ --     not be used. ----- -   @storageBuffer8BitAccess@ indicates whether objects in the---     @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the---     @Block@ decoration /can/ have 8-bit integer members. If this feature---     is not enabled, 8-bit integer members /must/ not be used in such---     objects. This also indicates whether shader modules /can/ declare---     the @StorageBuffer8BitAccess@ capability.+-- -   #features-storageBuffer8BitAccess# @storageBuffer8BitAccess@+--     indicates whether objects in the @StorageBuffer@ or+--     @PhysicalStorageBuffer@ storage class with the @Block@ decoration+--     /can/ have 8-bit integer members. If this feature is not enabled,+--     8-bit integer members /must/ not be used in such objects. This also+--     indicates whether shader modules /can/ declare the+--     @StorageBuffer8BitAccess@ capability. ----- -   @uniformAndStorageBuffer8BitAccess@ indicates whether objects in the+-- -   #features-uniformAndStorageBuffer8BitAccess#+--     @uniformAndStorageBuffer8BitAccess@ indicates whether objects in the --     @Uniform@ storage class with the @Block@ decoration and in the --     @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the --     same decoration /can/ have 8-bit integer members. If this feature is@@ -526,41 +538,46 @@ --     objects. This also indicates whether shader modules /can/ declare --     the @UniformAndStorageBuffer8BitAccess@ capability. ----- -   @storagePushConstant8@ indicates whether objects in the---     @PushConstant@ storage class /can/ have 8-bit integer members. If---     this feature is not enabled, 8-bit integer members /must/ not be---     used in such objects. This also indicates whether shader modules---     /can/ declare the @StoragePushConstant8@ capability.+-- -   #features-storagePushConstant8# @storagePushConstant8@ indicates+--     whether objects in the @PushConstant@ storage class /can/ have 8-bit+--     integer members. If this feature is not enabled, 8-bit integer+--     members /must/ not be used in such objects. This also indicates+--     whether shader modules /can/ declare the @StoragePushConstant8@+--     capability. ----- -   @shaderBufferInt64Atomics@ indicates whether shaders /can/ perform---     64-bit unsigned and signed integer atomic operations on buffers.+-- -   #features-shaderBufferInt64Atomics# @shaderBufferInt64Atomics@+--     indicates whether shaders /can/ perform 64-bit unsigned and signed+--     integer atomic operations on buffers. ----- -   @shaderSharedInt64Atomics@ indicates whether shaders /can/ perform---     64-bit unsigned and signed integer atomic operations on shared---     memory.+-- -   #features-shaderSharedInt64Atomics# @shaderSharedInt64Atomics@+--     indicates whether shaders /can/ perform 64-bit unsigned and signed+--     integer atomic operations on shared memory. ----- -   @shaderFloat16@ indicates whether 16-bit floats (halfs) are---     supported in shader code. This also indicates whether shader modules---     /can/ declare the @Float16@ capability. However, this only enables a---     subset of the storage classes that SPIR-V allows for the @Float16@---     SPIR-V capability: Declaring and using 16-bit floats in the---     @Private@, @Workgroup@, and @Function@ storage classes is enabled,---     while declaring them in the interface storage classes (e.g.,---     @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@,---     and @PushConstant@) is not enabled.+-- -   #features-shaderFloat16# @shaderFloat16@ indicates whether 16-bit+--     floats (halfs) are supported in shader code. This also indicates+--     whether shader modules /can/ declare the @Float16@ capability.+--     However, this only enables a subset of the storage classes that+--     SPIR-V allows for the @Float16@ SPIR-V capability: Declaring and+--     using 16-bit floats in the @Private@, @Workgroup@, and @Function@+--     storage classes is enabled, while declaring them in the interface+--     storage classes (e.g., @UniformConstant@, @Uniform@,+--     @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not+--     enabled. ----- -   @shaderInt8@ indicates whether 8-bit integers (signed and unsigned)---     are supported in shader code. This also indicates whether shader---     modules /can/ declare the @Int8@ capability. However, this only---     enables a subset of the storage classes that SPIR-V allows for the---     @Int8@ SPIR-V capability: Declaring and using 8-bit integers in the---     @Private@, @Workgroup@, and @Function@ storage classes is enabled,---     while declaring them in the interface storage classes (e.g.,---     @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@,---     and @PushConstant@) is not enabled.+-- -   #features-shaderInt8# @shaderInt8@ indicates whether 8-bit integers+--     (signed and unsigned) are supported in shader code. This also+--     indicates whether shader modules /can/ declare the @Int8@+--     capability. However, this only enables a subset of the storage+--     classes that SPIR-V allows for the @Int8@ SPIR-V capability:+--     Declaring and using 8-bit integers in the @Private@, @Workgroup@,+--     and @Function@ storage classes is enabled, while declaring them in+--     the interface storage classes (e.g., @UniformConstant@, @Uniform@,+--     @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not+--     enabled. ----- -   @descriptorIndexing@ indicates whether the implementation supports---     the minimum set of descriptor indexing features as described in the+-- -   #features-descriptorIndexing# @descriptorIndexing@ indicates whether+--     the implementation supports the minimum set of descriptor indexing+--     features as described in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-requirements Feature Requirements> --     section. Enabling the @descriptorIndexing@ member when --     'Vulkan.Core10.Device.createDevice' is called does not imply the@@ -568,7 +585,8 @@ --     other descriptor indexing features /must/ be enabled individually as --     needed by the application. ----- -   @shaderInputAttachmentArrayDynamicIndexing@ indicates whether arrays+-- -   #features-shaderInputAttachmentArrayDynamicIndexing#+--     @shaderInputAttachmentArrayDynamicIndexing@ indicates whether arrays --     of input attachments /can/ be indexed by dynamically uniform integer --     expressions in shader code. If this feature is not enabled, --     resources with a descriptor type of@@ -578,7 +596,8 @@ --     shader modules /can/ declare the --     @InputAttachmentArrayDynamicIndexing@ capability. ----- -   @shaderUniformTexelBufferArrayDynamicIndexing@ indicates whether+-- -   #features-shaderUniformTexelBufferArrayDynamicIndexing#+--     @shaderUniformTexelBufferArrayDynamicIndexing@ indicates whether --     arrays of uniform texel buffers /can/ be indexed by dynamically --     uniform integer expressions in shader code. If this feature is not --     enabled, resources with a descriptor type of@@ -588,7 +607,8 @@ --     shader modules /can/ declare the --     @UniformTexelBufferArrayDynamicIndexing@ capability. ----- -   @shaderStorageTexelBufferArrayDynamicIndexing@ indicates whether+-- -   #features-shaderStorageTexelBufferArrayDynamicIndexing#+--     @shaderStorageTexelBufferArrayDynamicIndexing@ indicates whether --     arrays of storage texel buffers /can/ be indexed by dynamically --     uniform integer expressions in shader code. If this feature is not --     enabled, resources with a descriptor type of@@ -598,7 +618,8 @@ --     shader modules /can/ declare the --     @StorageTexelBufferArrayDynamicIndexing@ capability. ----- -   @shaderUniformBufferArrayNonUniformIndexing@ indicates whether+-- -   #features-shaderUniformBufferArrayNonUniformIndexing#+--     @shaderUniformBufferArrayNonUniformIndexing@ indicates whether --     arrays of uniform buffers /can/ be indexed by non-uniform integer --     expressions in shader code. If this feature is not enabled, --     resources with a descriptor type of@@ -610,7 +631,8 @@ --     shader modules /can/ declare the --     @UniformBufferArrayNonUniformIndexing@ capability. ----- -   @shaderSampledImageArrayNonUniformIndexing@ indicates whether arrays+-- -   #features-shaderSampledImageArrayNonUniformIndexing#+--     @shaderSampledImageArrayNonUniformIndexing@ indicates whether arrays --     of samplers or sampled images /can/ be indexed by non-uniform --     integer expressions in shader code. If this feature is not enabled, --     resources with a descriptor type of@@ -623,7 +645,8 @@ --     shader modules /can/ declare the --     @SampledImageArrayNonUniformIndexing@ capability. ----- -   @shaderStorageBufferArrayNonUniformIndexing@ indicates whether+-- -   #features-shaderStorageBufferArrayNonUniformIndexing#+--     @shaderStorageBufferArrayNonUniformIndexing@ indicates whether --     arrays of storage buffers /can/ be indexed by non-uniform integer --     expressions in shader code. If this feature is not enabled, --     resources with a descriptor type of@@ -635,7 +658,8 @@ --     shader modules /can/ declare the --     @StorageBufferArrayNonUniformIndexing@ capability. ----- -   @shaderStorageImageArrayNonUniformIndexing@ indicates whether arrays+-- -   #features-shaderStorageImageArrayNonUniformIndexing#+--     @shaderStorageImageArrayNonUniformIndexing@ indicates whether arrays --     of storage images /can/ be indexed by non-uniform integer --     expressions in shader code. If this feature is not enabled, --     resources with a descriptor type of@@ -645,7 +669,8 @@ --     shader modules /can/ declare the --     @StorageImageArrayNonUniformIndexing@ capability. ----- -   @shaderInputAttachmentArrayNonUniformIndexing@ indicates whether+-- -   #features-shaderInputAttachmentArrayNonUniformIndexing#+--     @shaderInputAttachmentArrayNonUniformIndexing@ indicates whether --     arrays of input attachments /can/ be indexed by non-uniform integer --     expressions in shader code. If this feature is not enabled, --     resources with a descriptor type of@@ -655,7 +680,8 @@ --     shader modules /can/ declare the --     @InputAttachmentArrayNonUniformIndexing@ capability. ----- -   @shaderUniformTexelBufferArrayNonUniformIndexing@ indicates whether+-- -   #features-shaderUniformTexelBufferArrayNonUniformIndexing#+--     @shaderUniformTexelBufferArrayNonUniformIndexing@ indicates whether --     arrays of uniform texel buffers /can/ be indexed by non-uniform --     integer expressions in shader code. If this feature is not enabled, --     resources with a descriptor type of@@ -665,7 +691,8 @@ --     shader modules /can/ declare the --     @UniformTexelBufferArrayNonUniformIndexing@ capability. ----- -   @shaderStorageTexelBufferArrayNonUniformIndexing@ indicates whether+-- -   #features-shaderStorageTexelBufferArrayNonUniformIndexing#+--     @shaderStorageTexelBufferArrayNonUniformIndexing@ indicates whether --     arrays of storage texel buffers /can/ be indexed by non-uniform --     integer expressions in shader code. If this feature is not enabled, --     resources with a descriptor type of@@ -675,14 +702,16 @@ --     shader modules /can/ declare the --     @StorageTexelBufferArrayNonUniformIndexing@ capability. ----- -   @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether+-- -   #features-descriptorBindingUniformBufferUpdateAfterBind#+--     @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether --     the implementation supports updating uniform buffer descriptors --     after a set is bound. If this feature is not enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' --     /must/ not be used with --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'. ----- -   @descriptorBindingSampledImageUpdateAfterBind@ indicates whether the+-- -   #features-descriptorBindingSampledImageUpdateAfterBind#+--     @descriptorBindingSampledImageUpdateAfterBind@ indicates whether the --     implementation supports updating sampled image descriptors after a --     set is bound. If this feature is not enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'@@ -692,61 +721,68 @@ --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'. ----- -   @descriptorBindingStorageImageUpdateAfterBind@ indicates whether the+-- -   #features-descriptorBindingStorageImageUpdateAfterBind#+--     @descriptorBindingStorageImageUpdateAfterBind@ indicates whether the --     implementation supports updating storage image descriptors after a --     set is bound. If this feature is not enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' --     /must/ not be used with --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'. ----- -   @descriptorBindingStorageBufferUpdateAfterBind@ indicates whether+-- -   #features-descriptorBindingStorageBufferUpdateAfterBind#+--     @descriptorBindingStorageBufferUpdateAfterBind@ indicates whether --     the implementation supports updating storage buffer descriptors --     after a set is bound. If this feature is not enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' --     /must/ not be used with --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'. ----- -   @descriptorBindingUniformTexelBufferUpdateAfterBind@ indicates+-- -   #features-descriptorBindingUniformTexelBufferUpdateAfterBind#+--     @descriptorBindingUniformTexelBufferUpdateAfterBind@ indicates --     whether the implementation supports updating uniform texel buffer --     descriptors after a set is bound. If this feature is not enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' --     /must/ not be used with --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'. ----- -   @descriptorBindingStorageTexelBufferUpdateAfterBind@ indicates+-- -   #features-descriptorBindingStorageTexelBufferUpdateAfterBind#+--     @descriptorBindingStorageTexelBufferUpdateAfterBind@ indicates --     whether the implementation supports updating storage texel buffer --     descriptors after a set is bound. If this feature is not enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' --     /must/ not be used with --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'. ----- -   @descriptorBindingUpdateUnusedWhilePending@ indicates whether the+-- -   #features-descriptorBindingUpdateUnusedWhilePending#+--     @descriptorBindingUpdateUnusedWhilePending@ indicates whether the --     implementation supports updating descriptors while the set is in --     use. If this feature is not enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT' --     /must/ not be used. ----- -   @descriptorBindingPartiallyBound@ indicates whether the+-- -   #features-descriptorBindingPartiallyBound#+--     @descriptorBindingPartiallyBound@ indicates whether the --     implementation supports statically using a descriptor set binding in --     which some descriptors are not valid. If this feature is not --     enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT' --     /must/ not be used. ----- -   @descriptorBindingVariableDescriptorCount@ indicates whether the+-- -   #features-descriptorBindingVariableDescriptorCount#+--     @descriptorBindingVariableDescriptorCount@ indicates whether the --     implementation supports descriptor sets with a variable-sized last --     binding. If this feature is not enabled, --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT' --     /must/ not be used. ----- -   @runtimeDescriptorArray@ indicates whether the implementation---     supports the SPIR-V @RuntimeDescriptorArray@ capability. If this---     feature is not enabled, descriptors /must/ not be declared in---     runtime arrays.+-- -   #features-runtimeDescriptorArray# @runtimeDescriptorArray@ indicates+--     whether the implementation supports the SPIR-V+--     @RuntimeDescriptorArray@ capability. If this feature is not enabled,+--     descriptors /must/ not be declared in runtime arrays. ----- -   @samplerFilterMinmax@ indicates whether the implementation supports---     a minimum set of required formats supporting min\/max filtering as---     defined by the+-- -   #features-samplerFilterMinmax# @samplerFilterMinmax@ indicates+--     whether the implementation supports a minimum set of required+--     formats supporting min\/max filtering as defined by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-filterMinmaxSingleComponentFormats-minimum-requirements filterMinmaxSingleComponentFormats> --     property minimum requirements. If this feature is not enabled, then --     no 'Vulkan.Core10.Sampler.SamplerCreateInfo' @pNext@ chain can@@ -754,31 +790,34 @@ --     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo' --     structure. ----- -   @scalarBlockLayout@ indicates that the implementation supports the---     layout of resource blocks in shaders using+-- -   #features-scalarBlockLayout# @scalarBlockLayout@ indicates that the+--     implementation supports the layout of resource blocks in shaders+--     using --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>. ----- -   @imagelessFramebuffer@ indicates that the implementation supports---     specifying the image view for attachments at render pass begin time---     via+-- -   #features-imagelessFramebuffer# @imagelessFramebuffer@ indicates+--     that the implementation supports specifying the image view for+--     attachments at render pass begin time via --     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.RenderPassAttachmentBeginInfo'. ----- -   @uniformBufferStandardLayout@ indicates that the implementation---     supports the same layouts for uniform buffers as for storage and---     other kinds of buffers. See+-- -   #features-uniformBufferStandardLayout# @uniformBufferStandardLayout@+--     indicates that the implementation supports the same layouts for+--     uniform buffers as for storage and other kinds of buffers. See --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Buffer Layout>. ----- -   @shaderSubgroupExtendedTypes@ is a boolean that specifies whether---     subgroup operations can use 8-bit integer, 16-bit integer, 64-bit---     integer, 16-bit floating-point, and vectors of these types in+-- -   #features-subgroup-extended-types# @shaderSubgroupExtendedTypes@ is+--     a boolean that specifies whether subgroup operations can use 8-bit+--     integer, 16-bit integer, 64-bit integer, 16-bit floating-point, and+--     vectors of these types in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations> --     with --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-scope-subgroup subgroup scope>if --     the implementation supports the types. ----- -   @separateDepthStencilLayouts@ indicates whether the implementation---     supports a 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' for a---     depth\/stencil image with only one of+-- -   #features-separateDepthStencilLayouts# @separateDepthStencilLayouts@+--     indicates whether the implementation supports a+--     'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' for a depth\/stencil+--     image with only one of --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT' --     set, and whether@@ -789,62 +828,69 @@ --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' --     can be used. ----- -   @hostQueryReset@ indicates that the implementation supports---     resetting queries from the host with+-- -   #features-hostQueryReset# @hostQueryReset@ indicates that the+--     implementation supports resetting queries from the host with --     'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.resetQueryPool'. ----- -   @timelineSemaphore@ indicates whether semaphores created with a+-- -   #features-timelineSemaphore# @timelineSemaphore@ indicates whether+--     semaphores created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' are --     supported. ----- -   @bufferDeviceAddress@ indicates that the implementation supports---     accessing buffer memory in shaders as storage buffers via an address---     queried from+-- -   #features-bufferDeviceAddress# @bufferDeviceAddress@ indicates that+--     the implementation supports accessing buffer memory in shaders as+--     storage buffers via an address queried from --     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'. ----- -   @bufferDeviceAddressCaptureReplay@ indicates that the implementation+-- -   #features-bufferDeviceAddressCaptureReplay#+--     @bufferDeviceAddressCaptureReplay@ indicates that the implementation --     supports saving and reusing buffer and device addresses, e.g. for --     trace capture and replay. ----- -   @bufferDeviceAddressMultiDevice@ indicates that the implementation+-- -   #features-bufferDeviceAddressMultiDevice#+--     @bufferDeviceAddressMultiDevice@ indicates that the implementation --     supports the @bufferDeviceAddress@ and @rayTracing@ features for --     logical devices created with multiple physical devices. If this --     feature is not supported, buffer and acceleration structure --     addresses /must/ not be queried on a logical device created with --     more than one physical device. ----- -   @vulkanMemoryModel@ indicates whether the Vulkan Memory Model is---     supported, as defined in+-- -   #features-vulkanMemoryModel# @vulkanMemoryModel@ indicates whether+--     the Vulkan Memory Model is supported, as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model Vulkan Memory Model>. --     This also indicates whether shader modules /can/ declare the --     @VulkanMemoryModel@ capability. ----- -   @vulkanMemoryModelDeviceScope@ indicates whether the Vulkan Memory+-- -   #features-vulkanMemoryModelDeviceScope#+--     @vulkanMemoryModelDeviceScope@ indicates whether the Vulkan Memory --     Model can use 'Vulkan.Core10.Handles.Device' scope synchronization. --     This also indicates whether shader modules /can/ declare the --     @VulkanMemoryModelDeviceScope@ capability. ----- -   @vulkanMemoryModelAvailabilityVisibilityChains@ indicates whether+-- -   #features-vulkanMemoryModelAvailabilityVisibilityChains#+--     @vulkanMemoryModelAvailabilityVisibilityChains@ indicates whether --     the Vulkan Memory Model can use --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model-availability-visibility availability and visibility chains> --     with more than one element. ----- -   @shaderOutputViewportIndex@ indicates whether the implementation---     supports the @ShaderViewportIndex@ SPIR-V capability enabling---     variables decorated with the @ViewportIndex@ built-in to be exported---     from vertex or tessellation evaluation shaders. If this feature is---     not enabled, the @ViewportIndex@ built-in decoration /must/ not be---     used on outputs in vertex or tessellation evaluation shaders.+-- -   #features-shaderOutputViewportIndex# @shaderOutputViewportIndex@+--     indicates whether the implementation supports the+--     @ShaderViewportIndex@ SPIR-V capability enabling variables decorated+--     with the @ViewportIndex@ built-in to be exported from vertex or+--     tessellation evaluation shaders. If this feature is not enabled, the+--     @ViewportIndex@ built-in decoration /must/ not be used on outputs in+--     vertex or tessellation evaluation shaders. ----- -   @shaderOutputLayer@ indicates whether the implementation supports---     the @ShaderLayer@ SPIR-V capability enabling variables decorated---     with the @Layer@ built-in to be exported from vertex or tessellation---     evaluation shaders. If this feature is not enabled, the @Layer@---     built-in decoration /must/ not be used on outputs in vertex or---     tessellation evaluation shaders.+-- -   #features-shaderOutputLayer# @shaderOutputLayer@ indicates whether+--     the implementation supports the @ShaderLayer@ SPIR-V capability+--     enabling variables decorated with the @Layer@ built-in to be+--     exported from vertex or tessellation evaluation shaders. If this+--     feature is not enabled, the @Layer@ built-in decoration /must/ not+--     be used on outputs in vertex or tessellation evaluation shaders. ----- -   If @subgroupBroadcastDynamicId@ is+-- -   #features-subgroupBroadcastDynamicId# If+--     @subgroupBroadcastDynamicId@ is --     'Vulkan.Core10.FundamentalTypes.TRUE', the “Id” operand of --     @OpGroupNonUniformBroadcast@ /can/ be dynamically uniform within a --     subgroup, and the “Index” operand of@@ -862,7 +908,8 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceVulkan12Features-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES' -- -- = See Also@@ -1229,101 +1276,117 @@     -- driver is conformant against (see     -- 'Vulkan.Core12.Promoted_From_VK_KHR_driver_properties.ConformanceVersion').     conformanceVersion :: ConformanceVersion-  , -- | @denormBehaviorIndependence@ is a+  , -- | #features-denormBehaviorIndependence# @denormBehaviorIndependence@ is a     -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'     -- value indicating whether, and how, denorm behavior can be set     -- independently for different bit widths.     denormBehaviorIndependence :: ShaderFloatControlsIndependence-  , -- | @roundingModeIndependence@ is a+  , -- | #features-roundingModeIndependence# @roundingModeIndependence@ is a     -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'     -- value indicating whether, and how, rounding modes can be set     -- independently for different bit widths.     roundingModeIndependence :: ShaderFloatControlsIndependence-  , -- | @shaderSignedZeroInfNanPreserveFloat16@ is a boolean value indicating+  , -- | #limits-shaderSignedZeroInfNanPreserveFloat16#+    -- @shaderSignedZeroInfNanPreserveFloat16@ is a boolean value indicating     -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in     -- 16-bit floating-point computations. It also indicates whether the     -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 16-bit     -- floating-point types.     shaderSignedZeroInfNanPreserveFloat16 :: Bool-  , -- | @shaderSignedZeroInfNanPreserveFloat32@ is a boolean value indicating+  , -- | #limits-shaderSignedZeroInfNanPreserveFloat32#+    -- @shaderSignedZeroInfNanPreserveFloat32@ is a boolean value indicating     -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in     -- 32-bit floating-point computations. It also indicates whether the     -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 32-bit     -- floating-point types.     shaderSignedZeroInfNanPreserveFloat32 :: Bool-  , -- | @shaderSignedZeroInfNanPreserveFloat64@ is a boolean value indicating+  , -- | #limits-shaderSignedZeroInfNanPreserveFloat64#+    -- @shaderSignedZeroInfNanPreserveFloat64@ is a boolean value indicating     -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in     -- 64-bit floating-point computations. It also indicates whether the     -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 64-bit     -- floating-point types.     shaderSignedZeroInfNanPreserveFloat64 :: Bool-  , -- | @shaderDenormPreserveFloat16@ is a boolean value indicating whether-    -- denormals /can/ be preserved in 16-bit floating-point computations. It-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used-    -- for 16-bit floating-point types.+  , -- | #limits-shaderDenormPreserveFloat16# @shaderDenormPreserveFloat16@ is a+    -- boolean value indicating whether denormals /can/ be preserved in 16-bit+    -- floating-point computations. It also indicates whether the+    -- @DenormPreserve@ execution mode /can/ be used for 16-bit floating-point+    -- types.     shaderDenormPreserveFloat16 :: Bool-  , -- | @shaderDenormPreserveFloat32@ is a boolean value indicating whether-    -- denormals /can/ be preserved in 32-bit floating-point computations. It-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used-    -- for 32-bit floating-point types.+  , -- | #limits-shaderDenormPreserveFloat32# @shaderDenormPreserveFloat32@ is a+    -- boolean value indicating whether denormals /can/ be preserved in 32-bit+    -- floating-point computations. It also indicates whether the+    -- @DenormPreserve@ execution mode /can/ be used for 32-bit floating-point+    -- types.     shaderDenormPreserveFloat32 :: Bool-  , -- | @shaderDenormPreserveFloat64@ is a boolean value indicating whether-    -- denormals /can/ be preserved in 64-bit floating-point computations. It-    -- also indicates whether the @DenormPreserve@ execution mode /can/ be used-    -- for 64-bit floating-point types.+  , -- | #limits-shaderDenormPreserveFloat64# @shaderDenormPreserveFloat64@ is a+    -- boolean value indicating whether denormals /can/ be preserved in 64-bit+    -- floating-point computations. It also indicates whether the+    -- @DenormPreserve@ execution mode /can/ be used for 64-bit floating-point+    -- types.     shaderDenormPreserveFloat64 :: Bool-  , -- | @shaderDenormFlushToZeroFloat16@ is a boolean value indicating whether-    -- denormals /can/ be flushed to zero in 16-bit floating-point-    -- computations. It also indicates whether the @DenormFlushToZero@-    -- execution mode /can/ be used for 16-bit floating-point types.+  , -- | #limits-shaderDenormFlushToZeroFloat16# @shaderDenormFlushToZeroFloat16@+    -- is a boolean value indicating whether denormals /can/ be flushed to zero+    -- in 16-bit floating-point computations. It also indicates whether the+    -- @DenormFlushToZero@ execution mode /can/ be used for 16-bit+    -- floating-point types.     shaderDenormFlushToZeroFloat16 :: Bool-  , -- | @shaderDenormFlushToZeroFloat32@ is a boolean value indicating whether-    -- denormals /can/ be flushed to zero in 32-bit floating-point-    -- computations. It also indicates whether the @DenormFlushToZero@-    -- execution mode /can/ be used for 32-bit floating-point types.+  , -- | #limits-shaderDenormFlushToZeroFloat32# @shaderDenormFlushToZeroFloat32@+    -- is a boolean value indicating whether denormals /can/ be flushed to zero+    -- in 32-bit floating-point computations. It also indicates whether the+    -- @DenormFlushToZero@ execution mode /can/ be used for 32-bit+    -- floating-point types.     shaderDenormFlushToZeroFloat32 :: Bool-  , -- | @shaderDenormFlushToZeroFloat64@ is a boolean value indicating whether-    -- denormals /can/ be flushed to zero in 64-bit floating-point-    -- computations. It also indicates whether the @DenormFlushToZero@-    -- execution mode /can/ be used for 64-bit floating-point types.+  , -- | #limits-shaderDenormFlushToZeroFloat64# @shaderDenormFlushToZeroFloat64@+    -- is a boolean value indicating whether denormals /can/ be flushed to zero+    -- in 64-bit floating-point computations. It also indicates whether the+    -- @DenormFlushToZero@ execution mode /can/ be used for 64-bit+    -- floating-point types.     shaderDenormFlushToZeroFloat64 :: Bool-  , -- | @shaderRoundingModeRTEFloat16@ is a boolean value indicating whether an-    -- implementation supports the round-to-nearest-even rounding mode for-    -- 16-bit floating-point arithmetic and conversion instructions. It also-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for-    -- 16-bit floating-point types.+  , -- | #limits-shaderRoundingModeRTEFloat16# @shaderRoundingModeRTEFloat16@ is+    -- a boolean value indicating whether an implementation supports the+    -- round-to-nearest-even rounding mode for 16-bit floating-point arithmetic+    -- and conversion instructions. It also indicates whether the+    -- @RoundingModeRTE@ execution mode /can/ be used for 16-bit floating-point+    -- types.     shaderRoundingModeRTEFloat16 :: Bool-  , -- | @shaderRoundingModeRTEFloat32@ is a boolean value indicating whether an-    -- implementation supports the round-to-nearest-even rounding mode for-    -- 32-bit floating-point arithmetic and conversion instructions. It also-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for-    -- 32-bit floating-point types.+  , -- | #limits-shaderRoundingModeRTEFloat32# @shaderRoundingModeRTEFloat32@ is+    -- a boolean value indicating whether an implementation supports the+    -- round-to-nearest-even rounding mode for 32-bit floating-point arithmetic+    -- and conversion instructions. It also indicates whether the+    -- @RoundingModeRTE@ execution mode /can/ be used for 32-bit floating-point+    -- types.     shaderRoundingModeRTEFloat32 :: Bool-  , -- | @shaderRoundingModeRTEFloat64@ is a boolean value indicating whether an-    -- implementation supports the round-to-nearest-even rounding mode for-    -- 64-bit floating-point arithmetic and conversion instructions. It also-    -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for-    -- 64-bit floating-point types.+  , -- | #limits-shaderRoundingModeRTEFloat64# @shaderRoundingModeRTEFloat64@ is+    -- a boolean value indicating whether an implementation supports the+    -- round-to-nearest-even rounding mode for 64-bit floating-point arithmetic+    -- and conversion instructions. It also indicates whether the+    -- @RoundingModeRTE@ execution mode /can/ be used for 64-bit floating-point+    -- types.     shaderRoundingModeRTEFloat64 :: Bool-  , -- | @shaderRoundingModeRTZFloat16@ is a boolean value indicating whether an-    -- implementation supports the round-towards-zero rounding mode for 16-bit-    -- floating-point arithmetic and conversion instructions. It also indicates-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 16-bit-    -- floating-point types.+  , -- | #limits-shaderRoundingModeRTZFloat16# @shaderRoundingModeRTZFloat16@ is+    -- a boolean value indicating whether an implementation supports the+    -- round-towards-zero rounding mode for 16-bit floating-point arithmetic+    -- and conversion instructions. It also indicates whether the+    -- @RoundingModeRTZ@ execution mode /can/ be used for 16-bit floating-point+    -- types.     shaderRoundingModeRTZFloat16 :: Bool-  , -- | @shaderRoundingModeRTZFloat32@ is a boolean value indicating whether an-    -- implementation supports the round-towards-zero rounding mode for 32-bit-    -- floating-point arithmetic and conversion instructions. It also indicates-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 32-bit-    -- floating-point types.+  , -- | #limits-shaderRoundingModeRTZFloat32# @shaderRoundingModeRTZFloat32@ is+    -- a boolean value indicating whether an implementation supports the+    -- round-towards-zero rounding mode for 32-bit floating-point arithmetic+    -- and conversion instructions. It also indicates whether the+    -- @RoundingModeRTZ@ execution mode /can/ be used for 32-bit floating-point+    -- types.     shaderRoundingModeRTZFloat32 :: Bool-  , -- | @shaderRoundingModeRTZFloat64@ is a boolean value indicating whether an-    -- implementation supports the round-towards-zero rounding mode for 64-bit-    -- floating-point arithmetic and conversion instructions. It also indicates-    -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 64-bit-    -- floating-point types.+  , -- | #limits-shaderRoundingModeRTZFloat64# @shaderRoundingModeRTZFloat64@ is+    -- a boolean value indicating whether an implementation supports the+    -- round-towards-zero rounding mode for 64-bit floating-point arithmetic+    -- and conversion instructions. It also indicates whether the+    -- @RoundingModeRTZ@ execution mode /can/ be used for 64-bit floating-point+    -- types.     shaderRoundingModeRTZFloat64 :: Bool-  , -- | @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of+  , -- | #limits-maxUpdateAfterBindDescriptorsInAllPools#+    -- @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of     -- descriptors (summed over all descriptor types) that /can/ be created     -- across all pools that are created with the     -- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'@@ -1331,42 +1394,48 @@     -- the space this limit represents is unable to satisfy a pool creation due     -- to fragmentation.     maxUpdateAfterBindDescriptorsInAllPools :: Word32-  , -- | @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean value+  , -- | #limits-shaderUniformBufferArrayNonUniformIndexingNative#+    -- @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether uniform buffer descriptors natively support     -- nonuniform indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- then a single dynamic instance of an instruction that nonuniformly     -- indexes an array of uniform buffers /may/ execute multiple times in     -- order to access all the descriptors.     shaderUniformBufferArrayNonUniformIndexingNative :: Bool-  , -- | @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value+  , -- | #limits-shaderSampledImageArrayNonUniformIndexingNative#+    -- @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether sampler and image descriptors natively support     -- nonuniform indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- then a single dynamic instance of an instruction that nonuniformly     -- indexes an array of samplers or images /may/ execute multiple times in     -- order to access all the descriptors.     shaderSampledImageArrayNonUniformIndexingNative :: Bool-  , -- | @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean value+  , -- | #limits-shaderStorageBufferArrayNonUniformIndexingNative#+    -- @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether storage buffer descriptors natively support     -- nonuniform indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- then a single dynamic instance of an instruction that nonuniformly     -- indexes an array of storage buffers /may/ execute multiple times in     -- order to access all the descriptors.     shaderStorageBufferArrayNonUniformIndexingNative :: Bool-  , -- | @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value+  , -- | #limits-shaderStorageImageArrayNonUniformIndexingNative#+    -- @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether storage image descriptors natively support nonuniform     -- indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE', then a     -- single dynamic instance of an instruction that nonuniformly indexes an     -- array of storage images /may/ execute multiple times in order to access     -- all the descriptors.     shaderStorageImageArrayNonUniformIndexingNative :: Bool-  , -- | @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean value+  , -- | #limits-shaderInputAttachmentArrayNonUniformIndexingNative#+    -- @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether input attachment descriptors natively support     -- nonuniform indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- then a single dynamic instance of an instruction that nonuniformly     -- indexes an array of input attachments /may/ execute multiple times in     -- order to access all the descriptors.     shaderInputAttachmentArrayNonUniformIndexingNative :: Bool-  , -- | @robustBufferAccessUpdateAfterBind@ is a boolean value indicating+  , -- | #limits-robustBufferAccessUpdateAfterBind#+    -- @robustBufferAccessUpdateAfterBind@ is a boolean value indicating     -- whether     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>     -- /can/ be enabled in a device simultaneously with@@ -1378,143 +1447,175 @@     -- /must/ be disabled or all of these update-after-bind features /must/ be     -- disabled.     robustBufferAccessUpdateAfterBind :: Bool-  , -- | @quadDivergentImplicitLod@ is a boolean value indicating whether-    -- implicit level of detail calculations for image operations have-    -- well-defined results when the image and\/or sampler objects used for the-    -- instruction are not uniform within a quad. See+  , -- | #limits-quadDivergentImplicitLod# @quadDivergentImplicitLod@ is a+    -- boolean value indicating whether implicit level of detail calculations+    -- for image operations have well-defined results when the image and\/or+    -- sampler objects used for the instruction are not uniform within a quad.+    -- See     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-derivative-image-operations Derivative Image Operations>.     quadDivergentImplicitLod :: Bool-  , -- | @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to+  , -- | #limits-maxPerStageDescriptorUpdateAfterBindSamplers#+    -- @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to     -- @maxPerStageDescriptorSamplers@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindSamplers :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to+  , -- | #limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers#+    -- @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to     -- @maxPerStageDescriptorUniformBuffers@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindUniformBuffers :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to+  , -- | #limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers#+    -- @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to     -- @maxPerStageDescriptorStorageBuffers@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindStorageBuffers :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to+  , -- | #limits-maxPerStageDescriptorUpdateAfterBindSampledImages#+    -- @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to     -- @maxPerStageDescriptorSampledImages@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindSampledImages :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to+  , -- | #limits-maxPerStageDescriptorUpdateAfterBindStorageImages#+    -- @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to     -- @maxPerStageDescriptorStorageImages@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindStorageImages :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to+  , -- | #limits-maxPerStageDescriptorUpdateAfterBindInputAttachments#+    -- @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to     -- @maxPerStageDescriptorInputAttachments@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindInputAttachments :: Word32-  , -- | @maxPerStageUpdateAfterBindResources@ is similar to+  , -- | #limits-maxPerStageUpdateAfterBindResources#+    -- @maxPerStageUpdateAfterBindResources@ is similar to     -- @maxPerStageResources@ but counts descriptors from descriptor sets     -- created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageUpdateAfterBindResources :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindSamplers@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindSamplers#+    -- @maxDescriptorSetUpdateAfterBindSamplers@ is similar to     -- @maxDescriptorSetSamplers@ but counts descriptors from descriptor sets     -- created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindSamplers :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindUniformBuffers#+    -- @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to     -- @maxDescriptorSetUniformBuffers@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindUniformBuffers :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic#+    -- @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to     -- @maxDescriptorSetUniformBuffersDynamic@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set.+    -- bit set. While an application /can/ allocate dynamic uniform buffer+    -- descriptors from a pool created with the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT',+    -- bindings for these descriptors /must/ not be present in any descriptor+    -- set layout that includes bindings created with+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'.     maxDescriptorSetUpdateAfterBindUniformBuffersDynamic :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindStorageBuffers#+    -- @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to     -- @maxDescriptorSetStorageBuffers@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindStorageBuffers :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic#+    -- @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to     -- @maxDescriptorSetStorageBuffersDynamic@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set.+    -- bit set. While an application /can/ allocate dynamic storage buffer+    -- descriptors from a pool created with the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT',+    -- bindings for these descriptors /must/ not be present in any descriptor+    -- set layout that includes bindings created with+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'.     maxDescriptorSetUpdateAfterBindStorageBuffersDynamic :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindSampledImages#+    -- @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to     -- @maxDescriptorSetSampledImages@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindSampledImages :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindStorageImages#+    -- @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to     -- @maxDescriptorSetStorageImages@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindStorageImages :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindInputAttachments#+    -- @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to     -- @maxDescriptorSetInputAttachments@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindInputAttachments :: Word32-  , -- | @supportedDepthResolveModes@ is a bitmask of-    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' indicating-    -- the set of supported depth resolve modes.+  , -- | #features-depthResolveModes# @supportedDepthResolveModes@ is a bitmask+    -- of 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'+    -- indicating the set of supported depth resolve modes.     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'     -- /must/ be included in the set but implementations /may/ support     -- additional modes.     supportedDepthResolveModes :: ResolveModeFlags-  , -- | @supportedStencilResolveModes@ is a bitmask of-    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' indicating-    -- the set of supported stencil resolve modes.+  , -- | #features-stencilResolveModes# @supportedStencilResolveModes@ is a+    -- bitmask of 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'+    -- indicating the set of supported stencil resolve modes.     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'     -- /must/ be included in the set but implementations /may/ support     -- additional modes.     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_AVERAGE_BIT'     -- /must/ not be included in the set.     supportedStencilResolveModes :: ResolveModeFlags-  , -- | @independentResolveNone@ is 'Vulkan.Core10.FundamentalTypes.TRUE' if the-    -- implementation supports setting the depth and stencil resolve modes to-    -- different values when one of those modes is+  , -- | #features-independentResolveNone# @independentResolveNone@ is+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports+    -- setting the depth and stencil resolve modes to different values when one+    -- of those modes is     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. Otherwise     -- the implementation only supports setting both modes to the same value.     independentResolveNone :: Bool-  , -- | @independentResolve@ is 'Vulkan.Core10.FundamentalTypes.TRUE' if the-    -- implementation supports all combinations of the supported depth and-    -- stencil resolve modes, including setting either depth or stencil resolve-    -- mode to 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. An+  , -- | #features-independentResolve# @independentResolve@ is+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports all+    -- combinations of the supported depth and stencil resolve modes, including+    -- setting either depth or stencil resolve mode to+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. An     -- implementation that supports @independentResolve@ /must/ also support     -- @independentResolveNone@.     independentResolve :: Bool-  , -- | @filterMinmaxSingleComponentFormats@ is a boolean value indicating+  , -- | #limits-filterMinmaxSingleComponentFormats#+    -- @filterMinmaxSingleComponentFormats@ is a boolean value indicating     -- whether a minimum set of required formats support min\/max filtering.     filterMinmaxSingleComponentFormats :: Bool-  , -- | @filterMinmaxImageComponentMapping@ is a boolean value indicating+  , -- | #limits-filterMinmaxImageComponentMapping#+    -- @filterMinmaxImageComponentMapping@ is a boolean value indicating     -- whether the implementation supports non-identity component mapping of     -- the image when doing min\/max filtering.     filterMinmaxImageComponentMapping :: Bool-  , -- | @maxTimelineSemaphoreValueDifference@ indicates the maximum difference+  , -- | #limits-maxTimelineSemaphoreValueDifference#+    -- @maxTimelineSemaphoreValueDifference@ indicates the maximum difference     -- allowed by the implementation between the current value of a timeline     -- semaphore and any pending signal or wait operations.     maxTimelineSemaphoreValueDifference :: Word64-  , -- | @framebufferIntegerColorSampleCounts@ is a bitmask of+  , -- | #limits-framebufferIntegerColorSampleCounts#+    -- @framebufferIntegerColorSampleCounts@ is a bitmask of     -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating     -- the color sample counts that are supported for all framebuffer color     -- attachments with integer formats.
src/Vulkan/Core12/Promoted_From_VK_EXT_descriptor_indexing.hs view
@@ -82,7 +82,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDescriptorIndexingFeatures = PhysicalDeviceDescriptorIndexingFeatures-  { -- | @shaderInputAttachmentArrayDynamicIndexing@ indicates whether arrays of+  { -- | #extension-features-shaderInputAttachmentArrayDynamicIndexing#+    -- @shaderInputAttachmentArrayDynamicIndexing@ indicates whether arrays of     -- input attachments /can/ be indexed by dynamically uniform integer     -- expressions in shader code. If this feature is not enabled, resources     -- with a descriptor type of@@ -91,7 +92,8 @@     -- into arrays in shader code. This also indicates whether shader modules     -- /can/ declare the @InputAttachmentArrayDynamicIndexing@ capability.     shaderInputAttachmentArrayDynamicIndexing :: Bool-  , -- | @shaderUniformTexelBufferArrayDynamicIndexing@ indicates whether arrays+  , -- | #extension-features-shaderUniformTexelBufferArrayDynamicIndexing#+    -- @shaderUniformTexelBufferArrayDynamicIndexing@ indicates whether arrays     -- of uniform texel buffers /can/ be indexed by dynamically uniform integer     -- expressions in shader code. If this feature is not enabled, resources     -- with a descriptor type of@@ -100,7 +102,8 @@     -- into arrays in shader code. This also indicates whether shader modules     -- /can/ declare the @UniformTexelBufferArrayDynamicIndexing@ capability.     shaderUniformTexelBufferArrayDynamicIndexing :: Bool-  , -- | @shaderStorageTexelBufferArrayDynamicIndexing@ indicates whether arrays+  , -- | #extension-features-shaderStorageTexelBufferArrayDynamicIndexing#+    -- @shaderStorageTexelBufferArrayDynamicIndexing@ indicates whether arrays     -- of storage texel buffers /can/ be indexed by dynamically uniform integer     -- expressions in shader code. If this feature is not enabled, resources     -- with a descriptor type of@@ -109,7 +112,8 @@     -- into arrays in shader code. This also indicates whether shader modules     -- /can/ declare the @StorageTexelBufferArrayDynamicIndexing@ capability.     shaderStorageTexelBufferArrayDynamicIndexing :: Bool-  , -- | @shaderUniformBufferArrayNonUniformIndexing@ indicates whether arrays of+  , -- | #extension-features-shaderUniformBufferArrayNonUniformIndexing#+    -- @shaderUniformBufferArrayNonUniformIndexing@ indicates whether arrays of     -- uniform buffers /can/ be indexed by non-uniform integer expressions in     -- shader code. If this feature is not enabled, resources with a descriptor     -- type of@@ -119,7 +123,8 @@     -- into arrays in shader code. This also indicates whether shader modules     -- /can/ declare the @UniformBufferArrayNonUniformIndexing@ capability.     shaderUniformBufferArrayNonUniformIndexing :: Bool-  , -- | @shaderSampledImageArrayNonUniformIndexing@ indicates whether arrays of+  , -- | #extension-features-shaderSampledImageArrayNonUniformIndexing#+    -- @shaderSampledImageArrayNonUniformIndexing@ indicates whether arrays of     -- samplers or sampled images /can/ be indexed by non-uniform integer     -- expressions in shader code. If this feature is not enabled, resources     -- with a descriptor type of@@ -130,7 +135,8 @@     -- into arrays in shader code. This also indicates whether shader modules     -- /can/ declare the @SampledImageArrayNonUniformIndexing@ capability.     shaderSampledImageArrayNonUniformIndexing :: Bool-  , -- | @shaderStorageBufferArrayNonUniformIndexing@ indicates whether arrays of+  , -- | #extension-features-shaderStorageBufferArrayNonUniformIndexing#+    -- @shaderStorageBufferArrayNonUniformIndexing@ indicates whether arrays of     -- storage buffers /can/ be indexed by non-uniform integer expressions in     -- shader code. If this feature is not enabled, resources with a descriptor     -- type of@@ -140,7 +146,8 @@     -- into arrays in shader code. This also indicates whether shader modules     -- /can/ declare the @StorageBufferArrayNonUniformIndexing@ capability.     shaderStorageBufferArrayNonUniformIndexing :: Bool-  , -- | @shaderStorageImageArrayNonUniformIndexing@ indicates whether arrays of+  , -- | #extension-features-shaderStorageImageArrayNonUniformIndexing#+    -- @shaderStorageImageArrayNonUniformIndexing@ indicates whether arrays of     -- storage images /can/ be indexed by non-uniform integer expressions in     -- shader code. If this feature is not enabled, resources with a descriptor     -- type of@@ -149,7 +156,8 @@     -- into arrays in shader code. This also indicates whether shader modules     -- /can/ declare the @StorageImageArrayNonUniformIndexing@ capability.     shaderStorageImageArrayNonUniformIndexing :: Bool-  , -- | @shaderInputAttachmentArrayNonUniformIndexing@ indicates whether arrays+  , -- | #extension-features-shaderInputAttachmentArrayNonUniformIndexing#+    -- @shaderInputAttachmentArrayNonUniformIndexing@ indicates whether arrays     -- of input attachments /can/ be indexed by non-uniform integer expressions     -- in shader code. If this feature is not enabled, resources with a     -- descriptor type of@@ -158,7 +166,8 @@     -- into arrays in shader code. This also indicates whether shader modules     -- /can/ declare the @InputAttachmentArrayNonUniformIndexing@ capability.     shaderInputAttachmentArrayNonUniformIndexing :: Bool-  , -- | @shaderUniformTexelBufferArrayNonUniformIndexing@ indicates whether+  , -- | #extension-features-shaderUniformTexelBufferArrayNonUniformIndexing#+    -- @shaderUniformTexelBufferArrayNonUniformIndexing@ indicates whether     -- arrays of uniform texel buffers /can/ be indexed by non-uniform integer     -- expressions in shader code. If this feature is not enabled, resources     -- with a descriptor type of@@ -168,7 +177,8 @@     -- /can/ declare the @UniformTexelBufferArrayNonUniformIndexing@     -- capability.     shaderUniformTexelBufferArrayNonUniformIndexing :: Bool-  , -- | @shaderStorageTexelBufferArrayNonUniformIndexing@ indicates whether+  , -- | #extension-features-shaderStorageTexelBufferArrayNonUniformIndexing#+    -- @shaderStorageTexelBufferArrayNonUniformIndexing@ indicates whether     -- arrays of storage texel buffers /can/ be indexed by non-uniform integer     -- expressions in shader code. If this feature is not enabled, resources     -- with a descriptor type of@@ -178,14 +188,16 @@     -- /can/ declare the @StorageTexelBufferArrayNonUniformIndexing@     -- capability.     shaderStorageTexelBufferArrayNonUniformIndexing :: Bool-  , -- | @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether the+  , -- | #extension-features-descriptorBindingUniformBufferUpdateAfterBind#+    -- @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether the     -- implementation supports updating uniform buffer descriptors after a set     -- is bound. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'     -- /must/ not be used with     -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'.     descriptorBindingUniformBufferUpdateAfterBind :: Bool-  , -- | @descriptorBindingSampledImageUpdateAfterBind@ indicates whether the+  , -- | #extension-features-descriptorBindingSampledImageUpdateAfterBind#+    -- @descriptorBindingSampledImageUpdateAfterBind@ indicates whether the     -- implementation supports updating sampled image descriptors after a set     -- is bound. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'@@ -194,55 +206,63 @@     -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',     -- or 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'.     descriptorBindingSampledImageUpdateAfterBind :: Bool-  , -- | @descriptorBindingStorageImageUpdateAfterBind@ indicates whether the+  , -- | #extension-features-descriptorBindingStorageImageUpdateAfterBind#+    -- @descriptorBindingStorageImageUpdateAfterBind@ indicates whether the     -- implementation supports updating storage image descriptors after a set     -- is bound. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'     -- /must/ not be used with     -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'.     descriptorBindingStorageImageUpdateAfterBind :: Bool-  , -- | @descriptorBindingStorageBufferUpdateAfterBind@ indicates whether the+  , -- | #extension-features-descriptorBindingStorageBufferUpdateAfterBind#+    -- @descriptorBindingStorageBufferUpdateAfterBind@ indicates whether the     -- implementation supports updating storage buffer descriptors after a set     -- is bound. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'     -- /must/ not be used with     -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'.     descriptorBindingStorageBufferUpdateAfterBind :: Bool-  , -- | @descriptorBindingUniformTexelBufferUpdateAfterBind@ indicates whether+  , -- | #extension-features-descriptorBindingUniformTexelBufferUpdateAfterBind#+    -- @descriptorBindingUniformTexelBufferUpdateAfterBind@ indicates whether     -- the implementation supports updating uniform texel buffer descriptors     -- after a set is bound. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'     -- /must/ not be used with     -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'.     descriptorBindingUniformTexelBufferUpdateAfterBind :: Bool-  , -- | @descriptorBindingStorageTexelBufferUpdateAfterBind@ indicates whether+  , -- | #extension-features-descriptorBindingStorageTexelBufferUpdateAfterBind#+    -- @descriptorBindingStorageTexelBufferUpdateAfterBind@ indicates whether     -- the implementation supports updating storage texel buffer descriptors     -- after a set is bound. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'     -- /must/ not be used with     -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'.     descriptorBindingStorageTexelBufferUpdateAfterBind :: Bool-  , -- | @descriptorBindingUpdateUnusedWhilePending@ indicates whether the+  , -- | #extension-features-descriptorBindingUpdateUnusedWhilePending#+    -- @descriptorBindingUpdateUnusedWhilePending@ indicates whether the     -- implementation supports updating descriptors while the set is in use. If     -- this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT'     -- /must/ not be used.     descriptorBindingUpdateUnusedWhilePending :: Bool-  , -- | @descriptorBindingPartiallyBound@ indicates whether the implementation+  , -- | #extension-features-descriptorBindingPartiallyBound#+    -- @descriptorBindingPartiallyBound@ indicates whether the implementation     -- supports statically using a descriptor set binding in which some     -- descriptors are not valid. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT'     -- /must/ not be used.     descriptorBindingPartiallyBound :: Bool-  , -- | @descriptorBindingVariableDescriptorCount@ indicates whether the+  , -- | #extension-features-descriptorBindingVariableDescriptorCount#+    -- @descriptorBindingVariableDescriptorCount@ indicates whether the     -- implementation supports descriptor sets with a variable-sized last     -- binding. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT'     -- /must/ not be used.     descriptorBindingVariableDescriptorCount :: Bool-  , -- | @runtimeDescriptorArray@ indicates whether the implementation supports-    -- the SPIR-V @RuntimeDescriptorArray@ capability. If this feature is not-    -- enabled, descriptors /must/ not be declared in runtime arrays.+  , -- | #extension-features-runtimeDescriptorArray# @runtimeDescriptorArray@+    -- indicates whether the implementation supports the SPIR-V+    -- @RuntimeDescriptorArray@ capability. If this feature is not enabled,+    -- descriptors /must/ not be declared in runtime arrays.     runtimeDescriptorArray :: Bool   }   deriving (Typeable, Eq)@@ -382,7 +402,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDescriptorIndexingProperties = PhysicalDeviceDescriptorIndexingProperties-  { -- | @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of+  { -- | #extension-limits-maxUpdateAfterBindDescriptorsInAllPools#+    -- @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of     -- descriptors (summed over all descriptor types) that /can/ be created     -- across all pools that are created with the     -- 'Vulkan.Core10.Enums.DescriptorPoolCreateFlagBits.DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT'@@ -390,42 +411,48 @@     -- the space this limit represents is unable to satisfy a pool creation due     -- to fragmentation.     maxUpdateAfterBindDescriptorsInAllPools :: Word32-  , -- | @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean value+  , -- | #extension-limits-shaderUniformBufferArrayNonUniformIndexingNative#+    -- @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether uniform buffer descriptors natively support     -- nonuniform indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- then a single dynamic instance of an instruction that nonuniformly     -- indexes an array of uniform buffers /may/ execute multiple times in     -- order to access all the descriptors.     shaderUniformBufferArrayNonUniformIndexingNative :: Bool-  , -- | @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value+  , -- | #extension-limits-shaderSampledImageArrayNonUniformIndexingNative#+    -- @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether sampler and image descriptors natively support     -- nonuniform indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- then a single dynamic instance of an instruction that nonuniformly     -- indexes an array of samplers or images /may/ execute multiple times in     -- order to access all the descriptors.     shaderSampledImageArrayNonUniformIndexingNative :: Bool-  , -- | @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean value+  , -- | #extension-limits-shaderStorageBufferArrayNonUniformIndexingNative#+    -- @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether storage buffer descriptors natively support     -- nonuniform indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- then a single dynamic instance of an instruction that nonuniformly     -- indexes an array of storage buffers /may/ execute multiple times in     -- order to access all the descriptors.     shaderStorageBufferArrayNonUniformIndexingNative :: Bool-  , -- | @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value+  , -- | #extension-limits-shaderStorageImageArrayNonUniformIndexingNative#+    -- @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether storage image descriptors natively support nonuniform     -- indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE', then a     -- single dynamic instance of an instruction that nonuniformly indexes an     -- array of storage images /may/ execute multiple times in order to access     -- all the descriptors.     shaderStorageImageArrayNonUniformIndexingNative :: Bool-  , -- | @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean value+  , -- | #extension-limits-shaderInputAttachmentArrayNonUniformIndexingNative#+    -- @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean value     -- indicating whether input attachment descriptors natively support     -- nonuniform indexing. If this is 'Vulkan.Core10.FundamentalTypes.FALSE',     -- then a single dynamic instance of an instruction that nonuniformly     -- indexes an array of input attachments /may/ execute multiple times in     -- order to access all the descriptors.     shaderInputAttachmentArrayNonUniformIndexingNative :: Bool-  , -- | @robustBufferAccessUpdateAfterBind@ is a boolean value indicating+  , -- | #extension-limits-robustBufferAccessUpdateAfterBind#+    -- @robustBufferAccessUpdateAfterBind@ is a boolean value indicating     -- whether     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>     -- /can/ be enabled in a device simultaneously with@@ -437,97 +464,123 @@     -- /must/ be disabled or all of these update-after-bind features /must/ be     -- disabled.     robustBufferAccessUpdateAfterBind :: Bool-  , -- | @quadDivergentImplicitLod@ is a boolean value indicating whether-    -- implicit level of detail calculations for image operations have-    -- well-defined results when the image and\/or sampler objects used for the-    -- instruction are not uniform within a quad. See+  , -- | #extension-limits-quadDivergentImplicitLod# @quadDivergentImplicitLod@+    -- is a boolean value indicating whether implicit level of detail+    -- calculations for image operations have well-defined results when the+    -- image and\/or sampler objects used for the instruction are not uniform+    -- within a quad. See     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-derivative-image-operations Derivative Image Operations>.     quadDivergentImplicitLod :: Bool-  , -- | @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to+  , -- | #extension-limits-maxPerStageDescriptorUpdateAfterBindSamplers#+    -- @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to     -- @maxPerStageDescriptorSamplers@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindSamplers :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to+  , -- | #extension-limits-maxPerStageDescriptorUpdateAfterBindUniformBuffers#+    -- @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to     -- @maxPerStageDescriptorUniformBuffers@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindUniformBuffers :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to+  , -- | #extension-limits-maxPerStageDescriptorUpdateAfterBindStorageBuffers#+    -- @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to     -- @maxPerStageDescriptorStorageBuffers@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindStorageBuffers :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to+  , -- | #extension-limits-maxPerStageDescriptorUpdateAfterBindSampledImages#+    -- @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to     -- @maxPerStageDescriptorSampledImages@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindSampledImages :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to+  , -- | #extension-limits-maxPerStageDescriptorUpdateAfterBindStorageImages#+    -- @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to     -- @maxPerStageDescriptorStorageImages@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindStorageImages :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to+  , -- | #extension-limits-maxPerStageDescriptorUpdateAfterBindInputAttachments#+    -- @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to     -- @maxPerStageDescriptorInputAttachments@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindInputAttachments :: Word32-  , -- | @maxPerStageUpdateAfterBindResources@ is similar to+  , -- | #extension-limits-maxPerStageUpdateAfterBindResources#+    -- @maxPerStageUpdateAfterBindResources@ is similar to     -- @maxPerStageResources@ but counts descriptors from descriptor sets     -- created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageUpdateAfterBindResources :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindSamplers@ is similar to+  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindSamplers#+    -- @maxDescriptorSetUpdateAfterBindSamplers@ is similar to     -- @maxDescriptorSetSamplers@ but counts descriptors from descriptor sets     -- created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindSamplers :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to+  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindUniformBuffers#+    -- @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to     -- @maxDescriptorSetUniformBuffers@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindUniformBuffers :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to+  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindUniformBuffersDynamic#+    -- @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to     -- @maxDescriptorSetUniformBuffersDynamic@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set.+    -- bit set. While an application /can/ allocate dynamic uniform buffer+    -- descriptors from a pool created with the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT',+    -- bindings for these descriptors /must/ not be present in any descriptor+    -- set layout that includes bindings created with+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'.     maxDescriptorSetUpdateAfterBindUniformBuffersDynamic :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to+  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindStorageBuffers#+    -- @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to     -- @maxDescriptorSetStorageBuffers@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindStorageBuffers :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to+  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindStorageBuffersDynamic#+    -- @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to     -- @maxDescriptorSetStorageBuffersDynamic@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'-    -- bit set.+    -- bit set. While an application /can/ allocate dynamic storage buffer+    -- descriptors from a pool created with the+    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT',+    -- bindings for these descriptors /must/ not be present in any descriptor+    -- set layout that includes bindings created with+    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'.     maxDescriptorSetUpdateAfterBindStorageBuffersDynamic :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to+  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindSampledImages#+    -- @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to     -- @maxDescriptorSetSampledImages@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindSampledImages :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to+  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindStorageImages#+    -- @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to     -- @maxDescriptorSetStorageImages@ but counts descriptors from descriptor     -- sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxDescriptorSetUpdateAfterBindStorageImages :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to+  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindInputAttachments#+    -- @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to     -- @maxDescriptorSetInputAttachments@ but counts descriptors from     -- descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'@@ -675,10 +728,11 @@ -- -- == Valid Usage ----- -   If @bindingCount@ is not zero, @bindingCount@ /must/ equal+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-bindingCount-03002#+--     If @bindingCount@ is not zero, @bindingCount@ /must/ equal --     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@bindingCount@ ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-flags-03003# If --     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@flags@ --     includes --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR',@@ -688,20 +742,23 @@ --     or --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT' ----- -   If an element of @pBindingFlags@ includes+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03004#+--     If an element of @pBindingFlags@ includes --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT', --     then all other elements of --     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutCreateInfo'::@pBindings@ --     /must/ have a smaller value of @binding@ ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformBufferUpdateAfterBind-03005#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUniformBufferUpdateAfterBind@ --     is not enabled, all bindings with descriptor type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER' --     /must/ not use --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingSampledImageUpdateAfterBind-03006#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingSampledImageUpdateAfterBind@ --     is not enabled, all bindings with descriptor type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLER',@@ -711,42 +768,48 @@ --     /must/ not use --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageImageUpdateAfterBind-03007#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageImageUpdateAfterBind@ --     is not enabled, all bindings with descriptor type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE' --     /must/ not use --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageBufferUpdateAfterBind-03008#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageBufferUpdateAfterBind@ --     is not enabled, all bindings with descriptor type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER' --     /must/ not use --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUniformTexelBufferUpdateAfterBind-03009#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUniformTexelBufferUpdateAfterBind@ --     is not enabled, all bindings with descriptor type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER' --     /must/ not use --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingStorageTexelBufferUpdateAfterBind-03010#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingStorageTexelBufferUpdateAfterBind@ --     is not enabled, all bindings with descriptor type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER' --     /must/ not use --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingInlineUniformBlockUpdateAfterBind-02211#+--     If --     'Vulkan.Extensions.VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeaturesEXT'::@descriptorBindingInlineUniformBlockUpdateAfterBind@ --     is not enabled, all bindings with descriptor type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT' --     /must/ not use --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' ----- -   All bindings with descriptor type+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-None-03011# All+--     bindings with descriptor type --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC', --     or@@ -754,22 +817,26 @@ --     /must/ not use --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingUpdateUnusedWhilePending-03012#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingUpdateUnusedWhilePending@ --     is not enabled, all elements of @pBindingFlags@ /must/ not include --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingPartiallyBound-03013#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingPartiallyBound@ --     is not enabled, all elements of @pBindingFlags@ /must/ not include --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT' ----- -   If+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-descriptorBindingVariableDescriptorCount-03014#+--     If --     'PhysicalDeviceDescriptorIndexingFeatures'::@descriptorBindingVariableDescriptorCount@ --     is not enabled, all elements of @pBindingFlags@ /must/ not include --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT' ----- -   If an element of @pBindingFlags@ includes+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-03015#+--     If an element of @pBindingFlags@ includes --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT', --     that element’s @descriptorType@ /must/ not be --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'@@ -778,10 +845,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO' ----- -   If @bindingCount@ is not @0@, @pBindingFlags@ /must/ be a valid+-- -   #VUID-VkDescriptorSetLayoutBindingFlagsCreateInfo-pBindingFlags-parameter#+--     If @bindingCount@ is not @0@, @pBindingFlags@ /must/ be a valid --     pointer to an array of @bindingCount@ valid combinations of --     'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DescriptorBindingFlagBits' --     values@@ -854,11 +923,13 @@ -- -- == Valid Usage ----- -   If @descriptorSetCount@ is not zero, @descriptorSetCount@ /must/+-- -   #VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-descriptorSetCount-03045#+--     If @descriptorSetCount@ is not zero, @descriptorSetCount@ /must/ --     equal --     'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@descriptorSetCount@ ----- -   If+-- -   #VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-pSetLayouts-03046#+--     If --     'Vulkan.Core10.DescriptorSet.DescriptorSetAllocateInfo'::@pSetLayouts@[i] --     has a variable descriptor count binding, then @pDescriptorCounts@[i] --     /must/ be less than or equal to the descriptor count specified for@@ -866,10 +937,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO' ----- -   If @descriptorSetCount@ is not @0@, @pDescriptorCounts@ /must/ be a+-- -   #VUID-VkDescriptorSetVariableDescriptorCountAllocateInfo-pDescriptorCounts-parameter#+--     If @descriptorSetCount@ is not @0@, @pDescriptorCounts@ /must/ be a --     valid pointer to an array of @descriptorSetCount@ @uint32_t@ values -- -- = See Also
src/Vulkan/Core12/Promoted_From_VK_EXT_host_query_reset.hs view
@@ -63,33 +63,36 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkResetQueryPool-None-02665# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-hostQueryReset hostQueryReset> --     feature /must/ be enabled ----- -   @firstQuery@ /must/ be less than the number of queries in---     @queryPool@+-- -   #VUID-vkResetQueryPool-firstQuery-02666# @firstQuery@ /must/ be less+--     than the number of queries in @queryPool@ ----- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or---     equal to the number of queries in @queryPool@+-- -   #VUID-vkResetQueryPool-firstQuery-02667# The sum of @firstQuery@ and+--     @queryCount@ /must/ be less than or equal to the number of queries+--     in @queryPool@ ----- -   Submitted commands that refer to the range specified by @firstQuery@---     and @queryCount@ in @queryPool@ /must/ have completed execution+-- -   #VUID-vkResetQueryPool-firstQuery-02741# Submitted commands that+--     refer to the range specified by @firstQuery@ and @queryCount@ in+--     @queryPool@ /must/ have completed execution ----- -   The range of queries specified by @firstQuery@ and @queryCount@ in---     @queryPool@ /must/ not be in use by calls to---     'Vulkan.Core10.Query.getQueryPoolResults' or 'resetQueryPool' in---     other threads+-- -   #VUID-vkResetQueryPool-firstQuery-02742# The range of queries+--     specified by @firstQuery@ and @queryCount@ in @queryPool@ /must/ not+--     be in use by calls to 'Vulkan.Core10.Query.getQueryPoolResults' or+--     'resetQueryPool' in other threads -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkResetQueryPool-device-parameter# @device@ /must/ be a valid+--     'Vulkan.Core10.Handles.Device' handle ----- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle+-- -   #VUID-vkResetQueryPool-queryPool-parameter# @queryPool@ /must/ be a+--     valid 'Vulkan.Core10.Handles.QueryPool' handle ----- -   @queryPool@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkResetQueryPool-queryPool-parent# @queryPool@ /must/ have+--     been created, allocated, or retrieved from @device@ -- -- = See Also --@@ -140,8 +143,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceHostQueryResetFeatures = PhysicalDeviceHostQueryResetFeatures-  { -- | @hostQueryReset@ indicates that the implementation supports resetting-    -- queries from the host with 'resetQueryPool'.+  { -- | #extension-features-hostQueryReset# @hostQueryReset@ indicates that the+    -- implementation supports resetting queries from the host with+    -- 'resetQueryPool'.     hostQueryReset :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Core12/Promoted_From_VK_EXT_sampler_filter_minmax.hs view
@@ -80,10 +80,12 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceSamplerFilterMinmaxProperties = PhysicalDeviceSamplerFilterMinmaxProperties-  { -- | @filterMinmaxSingleComponentFormats@ is a boolean value indicating+  { -- | #extension-limits-filterMinmaxSingleComponentFormats#+    -- @filterMinmaxSingleComponentFormats@ is a boolean value indicating     -- whether a minimum set of required formats support min\/max filtering.     filterMinmaxSingleComponentFormats :: Bool-  , -- | @filterMinmaxImageComponentMapping@ is a boolean value indicating+  , -- | #extension-limits-filterMinmaxImageComponentMapping#+    -- @filterMinmaxImageComponentMapping@ is a boolean value indicating     -- whether the implementation supports non-identity component mapping of     -- the image when doing min\/max filtering.     filterMinmaxImageComponentMapping :: Bool@@ -154,6 +156,7 @@     -- 'Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode' value     -- controlling how texture filtering combines texel values.     --+    -- #VUID-VkSamplerReductionModeCreateInfo-reductionMode-parameter#     -- @reductionMode@ /must/ be a valid     -- 'Vulkan.Core12.Enums.SamplerReductionMode.SamplerReductionMode' value     reductionMode :: SamplerReductionMode }
src/Vulkan/Core12/Promoted_From_VK_EXT_scalar_block_layout.hs view
@@ -50,8 +50,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceScalarBlockLayoutFeatures = PhysicalDeviceScalarBlockLayoutFeatures-  { -- | @scalarBlockLayout@ indicates that the implementation supports the-    -- layout of resource blocks in shaders using+  { -- | #extension-features-scalarBlockLayout# @scalarBlockLayout@ indicates+    -- that the implementation supports the layout of resource blocks in+    -- shaders using     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-alignment-requirements scalar alignment>.     scalarBlockLayout :: Bool }   deriving (Typeable, Eq)
src/Vulkan/Core12/Promoted_From_VK_EXT_separate_stencil_usage.hs view
@@ -56,7 +56,8 @@ -- -- == Valid Usage ----- -   If @stencilUsage@ includes+-- -   #VUID-VkImageStencilUsageCreateInfo-stencilUsage-02539# If+--     @stencilUsage@ includes --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT', --     it /must/ not include bits other than --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT'@@ -65,13 +66,15 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageStencilUsageCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO' ----- -   @stencilUsage@ /must/ be a valid combination of+-- -   #VUID-VkImageStencilUsageCreateInfo-stencilUsage-parameter#+--     @stencilUsage@ /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values ----- -   @stencilUsage@ /must/ not be @0@+-- -   #VUID-VkImageStencilUsageCreateInfo-stencilUsage-requiredbitmask#+--     @stencilUsage@ /must/ not be @0@ -- -- = See Also --
src/Vulkan/Core12/Promoted_From_VK_KHR_8bit_storage.hs view
@@ -35,14 +35,16 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevice8BitStorageFeatures = PhysicalDevice8BitStorageFeatures-  { -- | @storageBuffer8BitAccess@ indicates whether objects in the-    -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the-    -- @Block@ decoration /can/ have 8-bit integer members. If this feature is-    -- not enabled, 8-bit integer members /must/ not be used in such objects.-    -- This also indicates whether shader modules /can/ declare the-    -- @StorageBuffer8BitAccess@ capability.+  { -- | #extension-features-storageBuffer8BitAccess# @storageBuffer8BitAccess@+    -- indicates whether objects in the @StorageBuffer@ or+    -- @PhysicalStorageBuffer@ storage class with the @Block@ decoration /can/+    -- have 8-bit integer members. If this feature is not enabled, 8-bit+    -- integer members /must/ not be used in such objects. This also indicates+    -- whether shader modules /can/ declare the @StorageBuffer8BitAccess@+    -- capability.     storageBuffer8BitAccess :: Bool-  , -- | @uniformAndStorageBuffer8BitAccess@ indicates whether objects in the+  , -- | #extension-features-uniformAndStorageBuffer8BitAccess#+    -- @uniformAndStorageBuffer8BitAccess@ indicates whether objects in the     -- @Uniform@ storage class with the @Block@ decoration and in the     -- @StorageBuffer@ or @PhysicalStorageBuffer@ storage class with the same     -- decoration /can/ have 8-bit integer members. If this feature is not@@ -50,11 +52,11 @@     -- also indicates whether shader modules /can/ declare the     -- @UniformAndStorageBuffer8BitAccess@ capability.     uniformAndStorageBuffer8BitAccess :: Bool-  , -- | @storagePushConstant8@ indicates whether objects in the @PushConstant@-    -- storage class /can/ have 8-bit integer members. If this feature is not-    -- enabled, 8-bit integer members /must/ not be used in such objects. This-    -- also indicates whether shader modules /can/ declare the-    -- @StoragePushConstant8@ capability.+  , -- | #extension-features-storagePushConstant8# @storagePushConstant8@+    -- indicates whether objects in the @PushConstant@ storage class /can/ have+    -- 8-bit integer members. If this feature is not enabled, 8-bit integer+    -- members /must/ not be used in such objects. This also indicates whether+    -- shader modules /can/ declare the @StoragePushConstant8@ capability.     storagePushConstant8 :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Core12/Promoted_From_VK_KHR_buffer_device_address.hs view
@@ -92,20 +92,23 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkGetBufferOpaqueCaptureAddress-None-03326# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress> --     feature /must/ be enabled ----- -   If @device@ was created with multiple physical devices, then the+-- -   #VUID-vkGetBufferOpaqueCaptureAddress-device-03327# If @device@ was+--     created with multiple physical devices, then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetBufferOpaqueCaptureAddress-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pInfo@ /must/ be a valid pointer to a valid---     'BufferDeviceAddressInfo' structure+-- -   #VUID-vkGetBufferOpaqueCaptureAddress-pInfo-parameter# @pInfo@+--     /must/ be a valid pointer to a valid 'BufferDeviceAddressInfo'+--     structure -- -- = See Also --@@ -160,13 +163,14 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkGetBufferDeviceAddress-bufferDeviceAddress-03324# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress> --     or --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressEXT ::bufferDeviceAddress> --     feature /must/ be enabled ----- -   If @device@ was created with multiple physical devices, then the+-- -   #VUID-vkGetBufferDeviceAddress-device-03325# If @device@ was created+--     with multiple physical devices, then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice> --     or --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDeviceEXT ::bufferDeviceAddressMultiDevice>@@ -174,10 +178,11 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetBufferDeviceAddress-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pInfo@ /must/ be a valid pointer to a valid---     'BufferDeviceAddressInfo' structure+-- -   #VUID-vkGetBufferDeviceAddress-pInfo-parameter# @pInfo@ /must/ be a+--     valid pointer to a valid 'BufferDeviceAddressInfo' structure -- -- = See Also --@@ -227,19 +232,22 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkGetDeviceMemoryOpaqueCaptureAddress-None-03334# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddress bufferDeviceAddress> --     feature /must/ be enabled ----- -   If @device@ was created with multiple physical devices, then the+-- -   #VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-03335# If+--     @device@ was created with multiple physical devices, then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetDeviceMemoryOpaqueCaptureAddress-pInfo-parameter# @pInfo@+--     /must/ be a valid pointer to a valid --     'DeviceMemoryOpaqueCaptureAddressInfo' structure -- -- = See Also@@ -296,15 +304,17 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceBufferDeviceAddressFeatures = PhysicalDeviceBufferDeviceAddressFeatures-  { -- | @bufferDeviceAddress@ indicates that the implementation supports-    -- accessing buffer memory in shaders as storage buffers via an address-    -- queried from 'getBufferDeviceAddress'.+  { -- | #extension-features-bufferDeviceAddress# @bufferDeviceAddress@ indicates+    -- that the implementation supports accessing buffer memory in shaders as+    -- storage buffers via an address queried from 'getBufferDeviceAddress'.     bufferDeviceAddress :: Bool-  , -- | @bufferDeviceAddressCaptureReplay@ indicates that the implementation+  , -- | #extension-features-bufferDeviceAddressCaptureReplay#+    -- @bufferDeviceAddressCaptureReplay@ indicates that the implementation     -- supports saving and reusing buffer and device addresses, e.g. for trace     -- capture and replay.     bufferDeviceAddressCaptureReplay :: Bool-  , -- | @bufferDeviceAddressMultiDevice@ indicates that the implementation+  , -- | #extension-features-bufferDeviceAddressMultiDevice#+    -- @bufferDeviceAddressMultiDevice@ indicates that the implementation     -- supports the @bufferDeviceAddress@ and @rayTracing@ features for logical     -- devices created with multiple physical devices. If this feature is not     -- supported, buffer and acceleration structure addresses /must/ not be@@ -362,22 +372,26 @@ -- -- == Valid Usage ----- -   If @buffer@ is non-sparse and was not created with the+-- -   #VUID-VkBufferDeviceAddressInfo-buffer-02600# If @buffer@ is+--     non-sparse and was not created with the --     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT' --     flag, then it /must/ be bound completely and contiguously to a --     single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @buffer@ /must/ have been created with+-- -   #VUID-VkBufferDeviceAddressInfo-buffer-02601# @buffer@ /must/ have+--     been created with --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBufferDeviceAddressInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkBufferDeviceAddressInfo-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkBufferDeviceAddressInfo-buffer-parameter# @buffer@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Buffer' handle -- -- = See Also --@@ -603,10 +617,12 @@ data DeviceMemoryOpaqueCaptureAddressInfo = DeviceMemoryOpaqueCaptureAddressInfo   { -- | @memory@ specifies the memory whose address is being queried.     ---    -- @memory@ /must/ have been allocated with+    -- #VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-memory-03336# @memory@+    -- /must/ have been allocated with     -- 'Vulkan.Core11.Enums.MemoryAllocateFlagBits.MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT'     ---    -- @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle+    -- #VUID-VkDeviceMemoryOpaqueCaptureAddressInfo-memory-parameter# @memory@+    -- /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle     memory :: DeviceMemory }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Core12/Promoted_From_VK_KHR_create_renderpass2.hs view
@@ -135,17 +135,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateRenderPass2-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'RenderPassCreateInfo2' structure+-- -   #VUID-vkCreateRenderPass2-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'RenderPassCreateInfo2'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateRenderPass2-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pRenderPass@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.RenderPass' handle+-- -   #VUID-vkCreateRenderPass2-pRenderPass-parameter# @pRenderPass@+--     /must/ be a valid pointer to a 'Vulkan.Core10.Handles.RenderPass'+--     handle -- -- == Return Codes --@@ -208,11 +211,13 @@ -- -- == Valid Usage ----- -   Both the @framebuffer@ and @renderPass@ members of---     @pRenderPassBegin@ /must/ have been created on the same---     'Vulkan.Core10.Handles.Device' that @commandBuffer@ was allocated on+-- -   #VUID-vkCmdBeginRenderPass2-framebuffer-02779# Both the+--     @framebuffer@ and @renderPass@ members of @pRenderPassBegin@ /must/+--     have been created on the same 'Vulkan.Core10.Handles.Device' that+--     @commandBuffer@ was allocated on ----- -   If any of the @initialLayout@ or @finalLayout@ member of the+-- -   #VUID-vkCmdBeginRenderPass2-initialLayout-03094# If any of the+--     @initialLayout@ or @finalLayout@ member of the --     'Vulkan.Core10.Pass.AttachmentDescription' structures or the --     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference' --     structures specified when creating the render pass specified in the@@ -223,7 +228,8 @@ --     have been created with a @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_COLOR_ATTACHMENT_BIT' ----- -   If any of the @initialLayout@ or @finalLayout@ member of the+-- -   #VUID-vkCmdBeginRenderPass2-initialLayout-03096# If any of the+--     @initialLayout@ or @finalLayout@ member of the --     'Vulkan.Core10.Pass.AttachmentDescription' structures or the --     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference' --     structures specified when creating the render pass specified in the@@ -238,7 +244,8 @@ --     have been created with a @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If any of the @initialLayout@ or @finalLayout@ member of the+-- -   #VUID-vkCmdBeginRenderPass2-initialLayout-02844# If any of the+--     @initialLayout@ or @finalLayout@ member of the --     'Vulkan.Core10.Pass.AttachmentDescription' structures or the --     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference' --     structures specified when creating the render pass specified in the@@ -254,8 +261,8 @@ --     have been created with a @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If any of the @stencilInitialLayout@ or @stencilFinalLayout@ member---     of the+-- -   #VUID-vkCmdBeginRenderPass2-stencilInitialLayout-02845# If any of+--     the @stencilInitialLayout@ or @stencilFinalLayout@ member of the --     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout' --     structures or the @stencilLayout@ member of the --     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'@@ -269,7 +276,8 @@ --     have been created with a @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If any of the @initialLayout@ or @finalLayout@ member of the+-- -   #VUID-vkCmdBeginRenderPass2-initialLayout-03097# If any of the+--     @initialLayout@ or @finalLayout@ member of the --     'Vulkan.Core10.Pass.AttachmentDescription' structures or the --     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference' --     structures specified when creating the render pass specified in the@@ -281,7 +289,8 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' or --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_INPUT_ATTACHMENT_BIT' ----- -   If any of the @initialLayout@ or @finalLayout@ member of the+-- -   #VUID-vkCmdBeginRenderPass2-initialLayout-03098# If any of the+--     @initialLayout@ or @finalLayout@ member of the --     'Vulkan.Core10.Pass.AttachmentDescription' structures or the --     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference' --     structures specified when creating the render pass specified in the@@ -292,7 +301,8 @@ --     have been created with a @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT' ----- -   If any of the @initialLayout@ or @finalLayout@ member of the+-- -   #VUID-vkCmdBeginRenderPass2-initialLayout-03099# If any of the+--     @initialLayout@ or @finalLayout@ member of the --     'Vulkan.Core10.Pass.AttachmentDescription' structures or the --     @layout@ member of the 'Vulkan.Core10.Pass.AttachmentReference' --     structures specified when creating the render pass specified in the@@ -303,7 +313,8 @@ --     have been created with a @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT' ----- -   If any of the @initialLayout@ members of the+-- -   #VUID-vkCmdBeginRenderPass2-initialLayout-03100# If any of the+--     @initialLayout@ members of the --     'Vulkan.Core10.Pass.AttachmentDescription' structures specified when --     creating the render pass specified in the @renderPass@ member of --     @pRenderPassBegin@ is not@@ -312,72 +323,82 @@ --     corresponding attachment image subresource of the framebuffer --     specified in the @framebuffer@ member of @pRenderPassBegin@ ----- -   The @srcStageMask@ and @dstStageMask@ members of any element of the---     @pDependencies@ member of 'Vulkan.Core10.Pass.RenderPassCreateInfo'---     used to create @renderPass@ /must/ be supported by the capabilities---     of the queue family identified by the @queueFamilyIndex@ member of---     the 'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to create---     the command pool which @commandBuffer@ was allocated from+-- -   #VUID-vkCmdBeginRenderPass2-srcStageMask-03101# The @srcStageMask@+--     and @dstStageMask@ members of any element of the @pDependencies@+--     member of 'Vulkan.Core10.Pass.RenderPassCreateInfo' used to create+--     @renderPass@ /must/ be supported by the capabilities of the queue+--     family identified by the @queueFamilyIndex@ member of the+--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo' used to create the+--     command pool which @commandBuffer@ was allocated from ----- -   For any attachment in @framebuffer@ that is used by @renderPass@ and---     is bound to memory locations that are also bound to another---     attachment used by @renderPass@, and if at least one of those uses---     causes either attachment to be written to, both attachments /must/---     have had the+-- -   #VUID-vkCmdBeginRenderPass2-framebuffer-02533# For any attachment in+--     @framebuffer@ that is used by @renderPass@ and is bound to memory+--     locations that are also bound to another attachment used by+--     @renderPass@, and if at least one of those uses causes either+--     attachment to be written to, both attachments /must/ have had the --     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT' --     set ----- -   Each element of the @pAttachments@ of @framebuffer@ that is---     referenced by any element of the @pInputAttachments@ of any element---     of @pSubpasses@ of @renderPass@ /must/ have+-- -   #VUID-vkCmdBeginRenderPass2-pAttachments-04106# Each element of the+--     @pAttachments@ of @framebuffer@ that is referenced by any element of+--     the @pInputAttachments@ of any element of @pSubpasses@ of+--     @renderPass@ /must/ have --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features> --     contain at least --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' --     or --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   Each element of the @pAttachments@ of @framebuffer@ that is---     referenced by any element of the @pColorAttachments@ of any element---     of @pSubpasses@ of @renderPass@ /must/ have+-- -   #VUID-vkCmdBeginRenderPass2-pAttachments-04107# Each element of the+--     @pAttachments@ of @framebuffer@ that is referenced by any element of+--     the @pColorAttachments@ of any element of @pSubpasses@ of+--     @renderPass@ /must/ have --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' ----- -   Each element of the @pAttachments@ of @framebuffer@ that is---     referenced by any element of the @pResolveAttachments@ of any---     element of @pSubpasses@ of @renderPass@ /must/ have+-- -   #VUID-vkCmdBeginRenderPass2-pAttachments-04108# Each element of the+--     @pAttachments@ of @framebuffer@ that is referenced by any element of+--     the @pResolveAttachments@ of any element of @pSubpasses@ of+--     @renderPass@ /must/ have --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' ----- -   Each element of the @pAttachments@ of @framebuffer@ that is---     referenced by any element of the @pDepthStencilAttachment@ of any---     element of @pSubpasses@ of @renderPass@ /must/ have+-- -   #VUID-vkCmdBeginRenderPass2-pAttachments-04109# Each element of the+--     @pAttachments@ of @framebuffer@ that is referenced by any element of+--     the @pDepthStencilAttachment@ of any element of @pSubpasses@ of+--     @renderPass@ /must/ have --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features image view format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdBeginRenderPass2-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pRenderPassBegin@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdBeginRenderPass2-pRenderPassBegin-parameter#+--     @pRenderPassBegin@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo' structure ----- -   @pSubpassBeginInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdBeginRenderPass2-pSubpassBeginInfo-parameter#+--     @pSubpassBeginInfo@ /must/ be a valid pointer to a valid --     'SubpassBeginInfo' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBeginRenderPass2-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBeginRenderPass2-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called outside of a render pass instance+-- -   #VUID-vkCmdBeginRenderPass2-renderpass# This command /must/ only be+--     called outside of a render pass instance ----- -   @commandBuffer@ /must/ be a primary---     'Vulkan.Core10.Handles.CommandBuffer'+-- -   #VUID-vkCmdBeginRenderPass2-bufferlevel# @commandBuffer@ /must/ be a+--     primary 'Vulkan.Core10.Handles.CommandBuffer' -- -- == Host Synchronization --@@ -453,33 +474,37 @@ -- -- == Valid Usage ----- -   The current subpass index /must/ be less than the number of---     subpasses in the render pass minus one+-- -   #VUID-vkCmdNextSubpass2-None-03102# The current subpass index /must/+--     be less than the number of subpasses in the render pass minus one ----- -   This command /must/ not be recorded when transform feedback is---     active+-- -   #VUID-vkCmdNextSubpass2-None-02350# This command /must/ not be+--     recorded when transform feedback is active -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdNextSubpass2-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pSubpassBeginInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdNextSubpass2-pSubpassBeginInfo-parameter#+--     @pSubpassBeginInfo@ /must/ be a valid pointer to a valid --     'SubpassBeginInfo' structure ----- -   @pSubpassEndInfo@ /must/ be a valid pointer to a valid---     'SubpassEndInfo' structure+-- -   #VUID-vkCmdNextSubpass2-pSubpassEndInfo-parameter# @pSubpassEndInfo@+--     /must/ be a valid pointer to a valid 'SubpassEndInfo' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdNextSubpass2-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdNextSubpass2-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdNextSubpass2-renderpass# This command /must/ only be+--     called inside of a render pass instance ----- -   @commandBuffer@ /must/ be a primary---     'Vulkan.Core10.Handles.CommandBuffer'+-- -   #VUID-vkCmdNextSubpass2-bufferlevel# @commandBuffer@ /must/ be a+--     primary 'Vulkan.Core10.Handles.CommandBuffer' -- -- == Host Synchronization --@@ -542,30 +567,35 @@ -- -- == Valid Usage ----- -   The current subpass index /must/ be equal to the number of subpasses---     in the render pass minus one+-- -   #VUID-vkCmdEndRenderPass2-None-03103# The current subpass index+--     /must/ be equal to the number of subpasses in the render pass minus+--     one ----- -   This command /must/ not be recorded when transform feedback is---     active+-- -   #VUID-vkCmdEndRenderPass2-None-02352# This command /must/ not be+--     recorded when transform feedback is active -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdEndRenderPass2-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pSubpassEndInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdEndRenderPass2-pSubpassEndInfo-parameter#+--     @pSubpassEndInfo@ /must/ be a valid pointer to a valid --     'SubpassEndInfo' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdEndRenderPass2-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdEndRenderPass2-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdEndRenderPass2-renderpass# This command /must/ only be+--     called inside of a render pass instance ----- -   @commandBuffer@ /must/ be a primary---     'Vulkan.Core10.Handles.CommandBuffer'+-- -   #VUID-vkCmdEndRenderPass2-bufferlevel# @commandBuffer@ /must/ be a+--     primary 'Vulkan.Core10.Handles.CommandBuffer' -- -- == Host Synchronization --@@ -639,32 +669,37 @@ -- -- == Valid Usage ----- -   @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-finalLayout-03061# @finalLayout@+--     /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED' ----- -   If @format@ is a color format, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03294# If @format@ is a color+--     format, @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL', --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL' ----- -   If @format@ is a depth\/stencil format, @initialLayout@ /must/ not---     be+-- -   #VUID-VkAttachmentDescription2-format-03295# If @format@ is a+--     depth\/stencil format, @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL' ----- -   If @format@ is a color format, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03296# If @format@ is a color+--     format, @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL', --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL' ----- -   If @format@ is a depth\/stencil format, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03297# If @format@ is a+--     depth\/stencil format, @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL' ----- -   If the+-- -   #VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03298# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts> --     feature is not enabled, @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',@@ -673,7 +708,8 @@ --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If the+-- -   #VUID-VkAttachmentDescription2-separateDepthStencilLayouts-03299# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts> --     feature is not enabled, @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',@@ -682,22 +718,25 @@ --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a color format, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03300# If @format@ is a color+--     format, @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a color format, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03301# If @format@ is a color+--     format, @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes both depth and---     stencil aspects, and @initialLayout@ is+-- -   #VUID-VkAttachmentDescription2-format-03302# If @format@ is a+--     depth\/stencil format which includes both depth and stencil aspects,+--     and @initialLayout@ is --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',@@ -705,8 +744,9 @@ --     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout' --     structure ----- -   If @format@ is a depth\/stencil format which includes both depth and---     stencil aspects, and @finalLayout@ is+-- -   #VUID-VkAttachmentDescription2-format-03303# If @format@ is a+--     depth\/stencil format which includes both depth and stencil aspects,+--     and @finalLayout@ is --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',@@ -714,67 +754,81 @@ --     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout' --     structure ----- -   If @format@ is a depth\/stencil format which includes only the depth---     aspect, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03304# If @format@ is a+--     depth\/stencil format which includes only the depth aspect,+--     @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes only the depth---     aspect, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03305# If @format@ is a+--     depth\/stencil format which includes only the depth aspect,+--     @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes only the---     stencil aspect, @initialLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03306# If @format@ is a+--     depth\/stencil format which includes only the stencil aspect,+--     @initialLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' ----- -   If @format@ is a depth\/stencil format which includes only the---     stencil aspect, @finalLayout@ /must/ not be+-- -   #VUID-VkAttachmentDescription2-format-03307# If @format@ is a+--     depth\/stencil format which includes only the stencil aspect,+--     @finalLayout@ /must/ not be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL' --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkAttachmentDescription2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkAttachmentDescription2-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentDescriptionStencilLayout' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkAttachmentDescription2-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkAttachmentDescription2-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.AttachmentDescriptionFlagBits' --     values ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-VkAttachmentDescription2-format-parameter# @format@ /must/ be+--     a valid 'Vulkan.Core10.Enums.Format.Format' value ----- -   @samples@ /must/ be a valid+-- -   #VUID-VkAttachmentDescription2-samples-parameter# @samples@ /must/+--     be a valid --     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value ----- -   @loadOp@ /must/ be a valid---     'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value+-- -   #VUID-VkAttachmentDescription2-loadOp-parameter# @loadOp@ /must/ be+--     a valid 'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp'+--     value ----- -   @storeOp@ /must/ be a valid---     'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value+-- -   #VUID-VkAttachmentDescription2-storeOp-parameter# @storeOp@ /must/+--     be a valid 'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp'+--     value ----- -   @stencilLoadOp@ /must/ be a valid+-- -   #VUID-VkAttachmentDescription2-stencilLoadOp-parameter#+--     @stencilLoadOp@ /must/ be a valid --     'Vulkan.Core10.Enums.AttachmentLoadOp.AttachmentLoadOp' value ----- -   @stencilStoreOp@ /must/ be a valid+-- -   #VUID-VkAttachmentDescription2-stencilStoreOp-parameter#+--     @stencilStoreOp@ /must/ be a valid --     'Vulkan.Core10.Enums.AttachmentStoreOp.AttachmentStoreOp' value ----- -   @initialLayout@ /must/ be a valid+-- -   #VUID-VkAttachmentDescription2-initialLayout-parameter#+--     @initialLayout@ /must/ be a valid --     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value ----- -   @finalLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+-- -   #VUID-VkAttachmentDescription2-finalLayout-parameter# @finalLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value -- -- = See Also --@@ -927,32 +981,14 @@ -- -- == Valid Usage ----- -   If @attachment@ is not+-- -   #VUID-VkAttachmentReference2-layout-03077# If @attachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@ /must/ not --     be 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED', --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED', or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR' ----- -   If @attachment@ is not---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@---     does not include---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'---     or 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT',---     @layout@ /must/ not be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'------ -   If @attachment@ is not---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@---     does not include---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',---     @layout@ /must/ not be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL'------ -   If the+-- -   #VUID-VkAttachmentReference2-separateDepthStencilLayouts-03313# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-separateDepthStencilLayouts separateDepthStencilLayouts> --     feature is not enabled, and @attachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@ /must/ not@@ -963,61 +999,20 @@ --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL', ----- -   If @attachment@ is not---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@---     includes---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT',---     @layout@ /must/ not be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',------ -   If @attachment@ is not---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@---     includes both---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' and---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT',---     and @layout@ is---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL'---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',---     the @pNext@ chain /must/ include a---     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout'---     structure------ -   If @attachment@ is not---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@---     includes only---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'---     then @layout@ /must/ not be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL',---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL'------ -   If @attachment@ is not---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', and @aspectMask@---     includes only---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'---     then @layout@ /must/ not be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',---     or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL'--- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkAttachmentReference2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkAttachmentReference2-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.AttachmentReferenceStencilLayout' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkAttachmentReference2-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @layout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+-- -   #VUID-VkAttachmentReference2-layout-parameter# @layout@ /must/ be a+--     valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value -- -- = See Also --@@ -1118,43 +1113,51 @@ -- -- == Valid Usage ----- -   @pipelineBindPoint@ /must/ be+-- -   #VUID-VkSubpassDescription2-pipelineBindPoint-03062#+--     @pipelineBindPoint@ /must/ be --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   @colorAttachmentCount@ /must/ be less than or equal to+-- -   #VUID-VkSubpassDescription2-colorAttachmentCount-03063#+--     @colorAttachmentCount@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxColorAttachments@ ----- -   If the first use of an attachment in this render pass is as an input---     attachment, and the attachment is not also used as a color or---     depth\/stencil attachment in the same subpass, then @loadOp@ /must/---     not be+-- -   #VUID-VkSubpassDescription2-loadOp-03064# If the first use of an+--     attachment in this render pass is as an input attachment, and the+--     attachment is not also used as a color or depth\/stencil attachment+--     in the same subpass, then @loadOp@ /must/ not be --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR' ----- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment+-- -   #VUID-VkSubpassDescription2-pResolveAttachments-03065# If+--     @pResolveAttachments@ is not @NULL@, for each resolve attachment --     that does not have the value --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the corresponding --     color attachment /must/ not have the value --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment+-- -   #VUID-VkSubpassDescription2-pResolveAttachments-03066# If+--     @pResolveAttachments@ is not @NULL@, for each resolve attachment --     that is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the --     corresponding color attachment /must/ not have a sample count of --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If @pResolveAttachments@ is not @NULL@, each resolve attachment that---     is not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a+-- -   #VUID-VkSubpassDescription2-pResolveAttachments-03067# If+--     @pResolveAttachments@ is not @NULL@, each resolve attachment that is+--     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a --     sample count of --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   Any given element of @pResolveAttachments@ /must/ have the same+-- -   #VUID-VkSubpassDescription2-pResolveAttachments-03068# Any given+--     element of @pResolveAttachments@ /must/ have the same --     'Vulkan.Core10.Enums.Format.Format' as its corresponding color --     attachment ----- -   All attachments in @pColorAttachments@ that are not+-- -   #VUID-VkSubpassDescription2-pColorAttachments-03069# All attachments+--     in @pColorAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have the same --     sample count ----- -   All attachments in @pInputAttachments@ that are not+-- -   #VUID-VkSubpassDescription2-pInputAttachments-02897# All attachments+--     in @pInputAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have image --     formats whose --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features>@@ -1163,35 +1166,40 @@ --     or --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   All attachments in @pColorAttachments@ that are not+-- -   #VUID-VkSubpassDescription2-pColorAttachments-02898# All attachments+--     in @pColorAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have image --     formats whose --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' ----- -   All attachments in @pResolveAttachments@ that are not+-- -   #VUID-VkSubpassDescription2-pResolveAttachments-02899# All+--     attachments in @pResolveAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have image --     formats whose --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT' ----- -   If @pDepthStencilAttachment@ is not @NULL@ and the attachment is not+-- -   #VUID-VkSubpassDescription2-pDepthStencilAttachment-02900# If+--     @pDepthStencilAttachment@ is not @NULL@ and the attachment is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have a --     image format whose --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#potential-format-features potential format features> --     contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If the @VK_AMD_mixed_attachment_samples@ extension is enabled, all+-- -   #VUID-VkSubpassDescription2-pColorAttachments-03070# If the+--     @VK_AMD_mixed_attachment_samples@ extension is enabled, all --     attachments in @pColorAttachments@ that are not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' /must/ have a sample --     count that is smaller than or equal to the sample count of --     @pDepthStencilAttachment@ if it is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   If neither the @VK_AMD_mixed_attachment_samples@ nor the+-- -   #VUID-VkSubpassDescription2-pDepthStencilAttachment-03071# If+--     neither the @VK_AMD_mixed_attachment_samples@ nor the --     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, and if --     @pDepthStencilAttachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' and any attachments@@ -1199,48 +1207,57 @@ --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', they /must/ have the --     same sample count ----- -   The @attachment@ member of any element of @pPreserveAttachments@---     /must/ not be 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'+-- -   #VUID-VkSubpassDescription2-attachment-03073# The @attachment@+--     member of any element of @pPreserveAttachments@ /must/ not be+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   Any given element of @pPreserveAttachments@ /must/ not also be an---     element of any other member of the subpass description+-- -   #VUID-VkSubpassDescription2-pPreserveAttachments-03074# Any given+--     element of @pPreserveAttachments@ /must/ not also be an element of+--     any other member of the subpass description ----- -   If any attachment is used by more than one---     'Vulkan.Core10.Pass.AttachmentReference' member, then each use---     /must/ use the same @layout@+-- -   #VUID-VkSubpassDescription2-layout-02528# If any attachment is used+--     by more than one 'Vulkan.Core10.Pass.AttachmentReference' member,+--     then each use /must/ use the same @layout@ ----- -   Attachments /must/ follow the+-- -   #VUID-VkSubpassDescription2-None-04439# Attachments /must/ follow+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#attachment-type-imagelayout image layout requirements> --     based on the type of attachment it is being used as ----- -   If @flags@ includes+-- -   #VUID-VkSubpassDescription2-flags-03076# If @flags@ includes --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX', --     it /must/ also include --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX' ----- -   If the @attachment@ member of any element of @pInputAttachments@ is---     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the+-- -   #VUID-VkSubpassDescription2-attachment-02799# If the @attachment@+--     member of any element of @pInputAttachments@ is not+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the --     @aspectMask@ member /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' ----- -   If the @attachment@ member of any element of @pInputAttachments@ is---     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the+-- -   #VUID-VkSubpassDescription2-attachment-02800# If the @attachment@+--     member of any element of @pInputAttachments@ is not+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the --     @aspectMask@ member /must/ not be @0@ ----- -   If the @attachment@ member of any element of @pInputAttachments@ is---     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the+-- -   #VUID-VkSubpassDescription2-attachment-02801# If the @attachment@+--     member of any element of @pInputAttachments@ is not+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the --     @aspectMask@ member /must/ not include --     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_METADATA_BIT' ----- -   If the @attachment@ member of any element of @pInputAttachments@ is---     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the+-- -   #VUID-VkSubpassDescription2-attachment-04563# If the @attachment@+--     member of any element of @pInputAttachments@ is not+--     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', then the --     @aspectMask@ member /must/ not include --     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ for any index @i@ ----- -   An attachment /must/ not be used in both @pDepthStencilAttachment@---     and @pColorAttachments@+-- -   #VUID-VkSubpassDescription2-pDepthStencilAttachment-04440# An+--     attachment /must/ not be used in both @pDepthStencilAttachment@ and+--     @pColorAttachments@ ----- -   If the @pFragmentShadingRateAttachment@ member of a+-- -   #VUID-VkSubpassDescription2-pFragmentShadingRateAttachment-04522# If+--     the @pFragmentShadingRateAttachment@ member of a --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' --     structure included in the @pNext@ chain is not @NULL@, and its --     @attachment@ member is not@@ -1249,45 +1266,51 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSubpassDescription2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2' ----- -   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+-- -   #VUID-VkSubpassDescription2-pNext-pNext# 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 --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR' --     or --     'Vulkan.Core12.Promoted_From_VK_KHR_depth_stencil_resolve.SubpassDescriptionDepthStencilResolve' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkSubpassDescription2-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDescription2-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.SubpassDescriptionFlagBits.SubpassDescriptionFlagBits' --     values ----- -   @pipelineBindPoint@ /must/ be a valid+-- -   #VUID-VkSubpassDescription2-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value ----- -   If @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be---     a valid pointer to an array of @inputAttachmentCount@ valid+-- -   #VUID-VkSubpassDescription2-pInputAttachments-parameter# If+--     @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be a+--     valid pointer to an array of @inputAttachmentCount@ valid --     'AttachmentReference2' structures ----- -   If @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be---     a valid pointer to an array of @colorAttachmentCount@ valid+-- -   #VUID-VkSubpassDescription2-pColorAttachments-parameter# If+--     @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be a+--     valid pointer to an array of @colorAttachmentCount@ valid --     'AttachmentReference2' structures ----- -   If @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is---     not @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an---     array of @colorAttachmentCount@ valid 'AttachmentReference2'---     structures+-- -   #VUID-VkSubpassDescription2-pResolveAttachments-parameter# If+--     @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is not+--     @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an array+--     of @colorAttachmentCount@ valid 'AttachmentReference2' structures ----- -   If @pDepthStencilAttachment@ is not @NULL@,---     @pDepthStencilAttachment@ /must/ be a valid pointer to a valid---     'AttachmentReference2' structure+-- -   #VUID-VkSubpassDescription2-pDepthStencilAttachment-parameter# If+--     @pDepthStencilAttachment@ is not @NULL@, @pDepthStencilAttachment@+--     /must/ be a valid pointer to a valid 'AttachmentReference2'+--     structure ----- -   If @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@---     /must/ be a valid pointer to an array of @preserveAttachmentCount@+-- -   #VUID-VkSubpassDescription2-pPreserveAttachments-parameter# If+--     @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@ /must/+--     be a valid pointer to an array of @preserveAttachmentCount@ --     @uint32_t@ values -- -- = See Also@@ -1456,39 +1479,42 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkSubpassDependency2-srcStageMask-03080# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders> --     feature is not enabled, @srcStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT' ----- -   If the+-- -   #VUID-VkSubpassDependency2-dstStageMask-03081# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders> --     feature is not enabled, @dstStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT' ----- -   If the+-- -   #VUID-VkSubpassDependency2-srcStageMask-03082# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders> --     feature is not enabled, @srcStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT' --     or --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' ----- -   If the+-- -   #VUID-VkSubpassDependency2-dstStageMask-03083# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders> --     feature is not enabled, @dstStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT' --     or --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' ----- -   @srcSubpass@ /must/ be less than or equal to @dstSubpass@, unless---     one of them is 'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', to---     avoid cyclic dependencies and ensure a valid execution order+-- -   #VUID-VkSubpassDependency2-srcSubpass-03084# @srcSubpass@ /must/ be+--     less than or equal to @dstSubpass@, unless one of them is+--     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', to avoid cyclic+--     dependencies and ensure a valid execution order ----- -   @srcSubpass@ and @dstSubpass@ /must/ not both be equal to+-- -   #VUID-VkSubpassDependency2-srcSubpass-03085# @srcSubpass@ and+--     @dstSubpass@ /must/ not both be equal to --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL' ----- -   If @srcSubpass@ is equal to @dstSubpass@ and not all of the stages---     in @srcStageMask@ and @dstStageMask@ are+-- -   #VUID-VkSubpassDependency2-srcSubpass-03087# If @srcSubpass@ is+--     equal to @dstSubpass@ and not all of the stages in @srcStageMask@+--     and @dstStageMask@ are --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stages>, --     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically latest>@@ -1498,83 +1524,95 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-order logically earliest> --     pipeline stage in @dstStageMask@ ----- -   Any access flag included in @srcAccessMask@ /must/ be supported by---     one of the pipeline stages in @srcStageMask@, as specified in the+-- -   #VUID-VkSubpassDependency2-srcAccessMask-03088# Any access flag+--     included in @srcAccessMask@ /must/ be supported by one of the+--     pipeline stages in @srcStageMask@, as specified in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types> ----- -   Any access flag included in @dstAccessMask@ /must/ be supported by---     one of the pipeline stages in @dstStageMask@, as specified in the+-- -   #VUID-VkSubpassDependency2-dstAccessMask-03089# Any access flag+--     included in @dstAccessMask@ /must/ be supported by one of the+--     pipeline stages in @dstStageMask@, as specified in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types-supported table of supported access types> ----- -   If @dependencyFlags@ includes+-- -   #VUID-VkSubpassDependency2-dependencyFlags-03090# If+--     @dependencyFlags@ includes --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT', --     @srcSubpass@ /must/ not be equal to --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL' ----- -   If @dependencyFlags@ includes+-- -   #VUID-VkSubpassDependency2-dependencyFlags-03091# If+--     @dependencyFlags@ includes --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT', --     @dstSubpass@ /must/ not be equal to --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL' ----- -   If @srcSubpass@ equals @dstSubpass@, and @srcStageMask@ and---     @dstStageMask@ both include a+-- -   #VUID-VkSubpassDependency2-srcSubpass-02245# If @srcSubpass@ equals+--     @dstSubpass@, and @srcStageMask@ and @dstStageMask@ both include a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-framebuffer-regions framebuffer-space stage>, --     then @dependencyFlags@ /must/ include --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_BY_REGION_BIT' ----- -   If @viewOffset@ is not equal to @0@, @srcSubpass@ /must/ not be---     equal to @dstSubpass@+-- -   #VUID-VkSubpassDependency2-viewOffset-02530# If @viewOffset@ is not+--     equal to @0@, @srcSubpass@ /must/ not be equal to @dstSubpass@ ----- -   If @dependencyFlags@ does not include+-- -   #VUID-VkSubpassDependency2-dependencyFlags-03092# If+--     @dependencyFlags@ does not include --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT', --     @viewOffset@ /must/ be @0@ ----- -   If the+-- -   #VUID-VkSubpassDependency2-srcStageMask-02103# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders> --     feature is not enabled, @srcStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV' ----- -   If the+-- -   #VUID-VkSubpassDependency2-srcStageMask-02104# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders> --     feature is not enabled, @srcStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV' ----- -   If the+-- -   #VUID-VkSubpassDependency2-dstStageMask-02105# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders> --     feature is not enabled, @dstStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV' ----- -   If the+-- -   #VUID-VkSubpassDependency2-dstStageMask-02106# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader task shaders> --     feature is not enabled, @dstStageMask@ /must/ not contain --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSubpassDependency2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkSubpassDependency2-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @srcStageMask@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency2-srcStageMask-parameter# @srcStageMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' --     values ----- -   @srcStageMask@ /must/ not be @0@+-- -   #VUID-VkSubpassDependency2-srcStageMask-requiredbitmask#+--     @srcStageMask@ /must/ not be @0@ ----- -   @dstStageMask@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency2-dstStageMask-parameter# @dstStageMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' --     values ----- -   @dstStageMask@ /must/ not be @0@+-- -   #VUID-VkSubpassDependency2-dstStageMask-requiredbitmask#+--     @dstStageMask@ /must/ not be @0@ ----- -   @srcAccessMask@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency2-srcAccessMask-parameter# @srcAccessMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values ----- -   @dstAccessMask@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency2-dstAccessMask-parameter# @dstAccessMask@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits' values ----- -   @dependencyFlags@ /must/ be a valid combination of+-- -   #VUID-VkSubpassDependency2-dependencyFlags-parameter#+--     @dependencyFlags@ /must/ be a valid combination of --     'Vulkan.Core10.Enums.DependencyFlagBits.DependencyFlagBits' values -- -- = See Also@@ -1702,32 +1740,33 @@ -- -- == Valid Usage ----- -   If any two subpasses operate on attachments with overlapping ranges---     of the same 'Vulkan.Core10.Handles.DeviceMemory' object, and at---     least one subpass writes to that area of---     'Vulkan.Core10.Handles.DeviceMemory', a subpass dependency /must/ be---     included (either directly or via some intermediate subpasses)---     between them+-- -   #VUID-VkRenderPassCreateInfo2-None-03049# If any two subpasses+--     operate on attachments with overlapping ranges of the same+--     'Vulkan.Core10.Handles.DeviceMemory' object, and at least one+--     subpass writes to that area of 'Vulkan.Core10.Handles.DeviceMemory',+--     a subpass dependency /must/ be included (either directly or via some+--     intermediate subpasses) between them ----- -   If the @attachment@ member of any element of @pInputAttachments@,---     @pColorAttachments@, @pResolveAttachments@ or---     @pDepthStencilAttachment@, or the attachment indexed by any element---     of @pPreserveAttachments@ in any given element of @pSubpasses@ is---     bound to a range of a 'Vulkan.Core10.Handles.DeviceMemory' object---     that overlaps with any other attachment in any subpass (including---     the same subpass), the 'AttachmentDescription2' structures---     describing them /must/ include+-- -   #VUID-VkRenderPassCreateInfo2-attachment-03050# If the @attachment@+--     member of any element of @pInputAttachments@, @pColorAttachments@,+--     @pResolveAttachments@ or @pDepthStencilAttachment@, or the+--     attachment indexed by any element of @pPreserveAttachments@ in any+--     given element of @pSubpasses@ is bound to a range of a+--     'Vulkan.Core10.Handles.DeviceMemory' object that overlaps with any+--     other attachment in any subpass (including the same subpass), the+--     'AttachmentDescription2' structures describing them /must/ include --     'Vulkan.Core10.Enums.AttachmentDescriptionFlagBits.ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT' --     in @flags@ ----- -   If the @attachment@ member of any element of @pInputAttachments@,---     @pColorAttachments@, @pResolveAttachments@ or---     @pDepthStencilAttachment@, or any element of @pPreserveAttachments@---     in any given element of @pSubpasses@ is not---     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it /must/ be less---     than @attachmentCount@+-- -   #VUID-VkRenderPassCreateInfo2-attachment-03051# If the @attachment@+--     member of any element of @pInputAttachments@, @pColorAttachments@,+--     @pResolveAttachments@ or @pDepthStencilAttachment@, or any element+--     of @pPreserveAttachments@ in any given element of @pSubpasses@ is+--     not 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', it /must/ be+--     less than @attachmentCount@ ----- -   For any member of @pAttachments@ with a @loadOp@ equal to+-- -   #VUID-VkRenderPassCreateInfo2-pAttachments-02522# For any member of+--     @pAttachments@ with a @loadOp@ equal to --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the --     first use of that attachment /must/ not specify a @layout@ equal to --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',@@ -1735,7 +1774,8 @@ --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL' ----- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to+-- -   #VUID-VkRenderPassCreateInfo2-pAttachments-02523# For any member of+--     @pAttachments@ with a @stencilLoadOp@ equal to --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_CLEAR', the --     first use of that attachment /must/ not specify a @layout@ equal to --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL',@@ -1743,14 +1783,16 @@ --     or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL' ----- -   For any element of @pDependencies@, if the @srcSubpass@ is not+-- -   #VUID-VkRenderPassCreateInfo2-pDependencies-03054# For any element+--     of @pDependencies@, if the @srcSubpass@ is not --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage flags --     included in the @srcStageMask@ member of that dependency /must/ be a --     pipeline stage supported by the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types pipeline> --     identified by the @pipelineBindPoint@ member of the source subpass ----- -   For any element of @pDependencies@, if the @dstSubpass@ is not+-- -   #VUID-VkRenderPassCreateInfo2-pDependencies-03055# For any element+--     of @pDependencies@, if the @dstSubpass@ is not --     'Vulkan.Core10.APIConstants.SUBPASS_EXTERNAL', all stage flags --     included in the @dstStageMask@ member of that dependency /must/ be a --     pipeline stage supported by the@@ -1758,49 +1800,58 @@ --     identified by the @pipelineBindPoint@ member of the destination --     subpass ----- -   The set of bits included in any element of @pCorrelatedViewMasks@---     /must/ not overlap with the set of bits included in any other---     element of @pCorrelatedViewMasks@+-- -   #VUID-VkRenderPassCreateInfo2-pCorrelatedViewMasks-03056# The set of+--     bits included in any element of @pCorrelatedViewMasks@ /must/ not+--     overlap with the set of bits included in any other element of+--     @pCorrelatedViewMasks@ ----- -   If the 'SubpassDescription2'::@viewMask@ member of all elements of+-- -   #VUID-VkRenderPassCreateInfo2-viewMask-03057# If the+--     'SubpassDescription2'::@viewMask@ member of all elements of --     @pSubpasses@ is @0@, @correlatedViewMaskCount@ /must/ be @0@ ----- -   The 'SubpassDescription2'::@viewMask@ member of all elements of+-- -   #VUID-VkRenderPassCreateInfo2-viewMask-03058# The+--     'SubpassDescription2'::@viewMask@ member of all elements of --     @pSubpasses@ /must/ either all be @0@, or all not be @0@ ----- -   If the 'SubpassDescription2'::@viewMask@ member of all elements of+-- -   #VUID-VkRenderPassCreateInfo2-viewMask-03059# If the+--     'SubpassDescription2'::@viewMask@ member of all elements of --     @pSubpasses@ is @0@, the @dependencyFlags@ member of any element of --     @pDependencies@ /must/ not include --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT' ----- -   For any element of @pDependencies@ where its @srcSubpass@ member---     equals its @dstSubpass@ member, if the @viewMask@ member of the---     corresponding element of @pSubpasses@ includes more than one bit,---     its @dependencyFlags@ member /must/ include+-- -   #VUID-VkRenderPassCreateInfo2-pDependencies-03060# For any element+--     of @pDependencies@ where its @srcSubpass@ member equals its+--     @dstSubpass@ member, if the @viewMask@ member of the corresponding+--     element of @pSubpasses@ includes more than one bit, its+--     @dependencyFlags@ member /must/ include --     'Vulkan.Core10.Enums.DependencyFlagBits.DEPENDENCY_VIEW_LOCAL_BIT' ----- -   The @viewMask@ member /must/ not have a bit set at an index greater---     than or equal to+-- -   #VUID-VkRenderPassCreateInfo2-viewMask-02524# The @viewMask@ member+--     /must/ not have a bit set at an index greater than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxFramebufferLayers@ ----- -   If the @attachment@ member of any element of the @pInputAttachments@---     member of any element of @pSubpasses@ is not+-- -   #VUID-VkRenderPassCreateInfo2-attachment-02525# If the @attachment@+--     member of any element of the @pInputAttachments@ member of any+--     element of @pSubpasses@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the @aspectMask@ --     member of that element of @pInputAttachments@ /must/ only include --     aspects that are present in images of the format specified by the --     element of @pAttachments@ specified by @attachment@ ----- -   The @srcSubpass@ member of each element of @pDependencies@ /must/ be---     less than @subpassCount@+-- -   #VUID-VkRenderPassCreateInfo2-srcSubpass-02526# The @srcSubpass@+--     member of each element of @pDependencies@ /must/ be less than+--     @subpassCount@ ----- -   The @dstSubpass@ member of each element of @pDependencies@ /must/ be---     less than @subpassCount@+-- -   #VUID-VkRenderPassCreateInfo2-dstSubpass-02527# The @dstSubpass@+--     member of each element of @pDependencies@ /must/ be less than+--     @subpassCount@ ----- -   If any element of @pAttachmentImageInfos@ is used as a fragment---     shading rate attachment in any subpass, it /must/ not be used as any---     other attachment in the render pass+-- -   #VUID-VkRenderPassCreateInfo2-pAttachmentImageInfos-04520# If any+--     element of @pAttachmentImageInfos@ is used as a fragment shading+--     rate attachment in any subpass, it /must/ not be used as any other+--     attachment in the render pass ----- -   If @flags@ includes+-- -   #VUID-VkRenderPassCreateInfo2-flags-04521# If @flags@ includes --     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM', --     an element of @pSubpasses@ includes an instance of --     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateAttachmentInfoKHR'@@ -1811,35 +1862,42 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRenderPassCreateInfo2-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkRenderPassCreateInfo2-pNext-pNext# @pNext@ /must/ be @NULL@+--     or a pointer to a valid instance of --     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderPassFragmentDensityMapCreateInfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkRenderPassCreateInfo2-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkRenderPassCreateInfo2-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RenderPassCreateFlagBits' --     values ----- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid+-- -   #VUID-VkRenderPassCreateInfo2-pAttachments-parameter# If+--     @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid --     pointer to an array of @attachmentCount@ valid --     'AttachmentDescription2' structures ----- -   @pSubpasses@ /must/ be a valid pointer to an array of @subpassCount@---     valid 'SubpassDescription2' structures+-- -   #VUID-VkRenderPassCreateInfo2-pSubpasses-parameter# @pSubpasses@+--     /must/ be a valid pointer to an array of @subpassCount@ valid+--     'SubpassDescription2' structures ----- -   If @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid+-- -   #VUID-VkRenderPassCreateInfo2-pDependencies-parameter# If+--     @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid --     pointer to an array of @dependencyCount@ valid 'SubpassDependency2' --     structures ----- -   If @correlatedViewMaskCount@ is not @0@, @pCorrelatedViewMasks@---     /must/ be a valid pointer to an array of @correlatedViewMaskCount@+-- -   #VUID-VkRenderPassCreateInfo2-pCorrelatedViewMasks-parameter# If+--     @correlatedViewMaskCount@ is not @0@, @pCorrelatedViewMasks@ /must/+--     be a valid pointer to an array of @correlatedViewMaskCount@ --     @uint32_t@ values ----- -   @subpassCount@ /must/ be greater than @0@+-- -   #VUID-VkRenderPassCreateInfo2-subpassCount-arraylength#+--     @subpassCount@ /must/ be greater than @0@ -- -- = See Also --@@ -1973,8 +2031,8 @@   { -- | @contents@ is a 'Vulkan.Core10.Enums.SubpassContents.SubpassContents'     -- value specifying how the commands in the next subpass will be provided.     ---    -- @contents@ /must/ be a valid-    -- 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value+    -- #VUID-VkSubpassBeginInfo-contents-parameter# @contents@ /must/ be a+    -- valid 'Vulkan.Core10.Enums.SubpassContents.SubpassContents' value     contents :: SubpassContents }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Core12/Promoted_From_VK_KHR_depth_stencil_resolve.hs view
@@ -60,14 +60,15 @@ -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlags', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDepthStencilResolveProperties = PhysicalDeviceDepthStencilResolveProperties-  { -- | @supportedDepthResolveModes@ is a bitmask of-    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' indicating-    -- the set of supported depth resolve modes.+  { -- | #extension-features-depthResolveModes# @supportedDepthResolveModes@ is a+    -- bitmask of 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits'+    -- indicating the set of supported depth resolve modes.     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'     -- /must/ be included in the set but implementations /may/ support     -- additional modes.     supportedDepthResolveModes :: ResolveModeFlags-  , -- | @supportedStencilResolveModes@ is a bitmask of+  , -- | #extension-features-stencilResolveModes# @supportedStencilResolveModes@+    -- is a bitmask of     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' indicating     -- the set of supported stencil resolve modes.     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_SAMPLE_ZERO_BIT'@@ -76,16 +77,18 @@     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_AVERAGE_BIT'     -- /must/ not be included in the set.     supportedStencilResolveModes :: ResolveModeFlags-  , -- | @independentResolveNone@ is 'Vulkan.Core10.FundamentalTypes.TRUE' if the-    -- implementation supports setting the depth and stencil resolve modes to-    -- different values when one of those modes is+  , -- | #extension-features-independentResolveNone# @independentResolveNone@ is+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports+    -- setting the depth and stencil resolve modes to different values when one+    -- of those modes is     -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. Otherwise     -- the implementation only supports setting both modes to the same value.     independentResolveNone :: Bool-  , -- | @independentResolve@ is 'Vulkan.Core10.FundamentalTypes.TRUE' if the-    -- implementation supports all combinations of the supported depth and-    -- stencil resolve modes, including setting either depth or stencil resolve-    -- mode to 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. An+  , -- | #extension-features-independentResolve# @independentResolve@ is+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports all+    -- combinations of the supported depth and stencil resolve modes, including+    -- setting either depth or stencil resolve mode to+    -- 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE'. An     -- implementation that supports @independentResolve@ /must/ also support     -- @independentResolveNone@.     independentResolve :: Bool@@ -145,52 +148,62 @@ -- -- == Valid Usage ----- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03177#+--     If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have --     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @pDepthStencilAttachment@ /must/ not have the value --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' ----- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03178#+--     If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have --     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @depthResolveMode@ and @stencilResolveMode@ /must/ not both be --     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE' ----- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03179#+--     If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have --     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @pDepthStencilAttachment@ /must/ not have a sample count of --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03180#+--     If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have --     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @pDepthStencilResolveAttachment@ /must/ have a sample count of --     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' ----- -   If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-02651#+--     If @pDepthStencilResolveAttachment@ is not @NULL@ and does not have --     the value 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it --     /must/ have a format whose features contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT' ----- -   If the 'Vulkan.Core10.Enums.Format.Format' of+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03181#+--     If the 'Vulkan.Core10.Enums.Format.Format' of --     @pDepthStencilResolveAttachment@ has a depth component, then the --     'Vulkan.Core10.Enums.Format.Format' of @pDepthStencilAttachment@ --     /must/ have a depth component with the same number of bits and --     numerical type ----- -   If the 'Vulkan.Core10.Enums.Format.Format' of+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03182#+--     If the 'Vulkan.Core10.Enums.Format.Format' of --     @pDepthStencilResolveAttachment@ has a stencil component, then the --     'Vulkan.Core10.Enums.Format.Format' of @pDepthStencilAttachment@ --     /must/ have a stencil component with the same number of bits and --     numerical type ----- -   The value of @depthResolveMode@ /must/ be one of the bits set in+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-depthResolveMode-03183#+--     The value of @depthResolveMode@ /must/ be one of the bits set in --     'PhysicalDeviceDepthStencilResolveProperties'::@supportedDepthResolveModes@ --     or 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE' ----- -   The value of @stencilResolveMode@ /must/ be one of the bits set in+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-stencilResolveMode-03184#+--     The value of @stencilResolveMode@ /must/ be one of the bits set in --     'PhysicalDeviceDepthStencilResolveProperties'::@supportedStencilResolveModes@ --     or 'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_NONE' ----- -   If the 'Vulkan.Core10.Enums.Format.Format' of+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03185#+--     If the 'Vulkan.Core10.Enums.Format.Format' of --     @pDepthStencilResolveAttachment@ has both depth and stencil --     components, --     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolve@@@ -199,7 +212,8 @@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE', then the values of --     @depthResolveMode@ and @stencilResolveMode@ /must/ be identical ----- -   If the 'Vulkan.Core10.Enums.Format.Format' of+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-03186#+--     If the 'Vulkan.Core10.Enums.Format.Format' of --     @pDepthStencilResolveAttachment@ has both depth and stencil --     components, --     'PhysicalDeviceDepthStencilResolveProperties'::@independentResolve@@@ -212,16 +226,20 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE' ----- -   @depthResolveMode@ /must/ be a valid+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-depthResolveMode-parameter#+--     @depthResolveMode@ /must/ be a valid --     'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' value ----- -   @stencilResolveMode@ /must/ be a valid+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-stencilResolveMode-parameter#+--     @stencilResolveMode@ /must/ be a valid --     'Vulkan.Core12.Enums.ResolveModeFlagBits.ResolveModeFlagBits' value ----- -   If @pDepthStencilResolveAttachment@ is not @NULL@,+-- -   #VUID-VkSubpassDescriptionDepthStencilResolve-pDepthStencilResolveAttachment-parameter#+--     If @pDepthStencilResolveAttachment@ is not @NULL@, --     @pDepthStencilResolveAttachment@ /must/ be a valid pointer to a --     valid --     'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2'
src/Vulkan/Core12/Promoted_From_VK_KHR_draw_indirect_count.hs view
@@ -42,7 +42,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdDrawIndirectCount-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -51,20 +52,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdDrawIndirectCount-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdDrawIndirectCount-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawIndirectCount-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -73,7 +77,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -87,53 +92,58 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdDrawIndirectCount-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a+-- -   #VUID-vkCmdDrawIndirectCount-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a --     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set --     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create --     the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a+-- -   #VUID-vkCmdDrawIndirectCount-None-02698# For each push constant that+--     is statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to+--     the pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a --     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push --     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdDrawIndirectCount-None-02699# Descriptors in each bound+--     descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdDrawIndirectCount-None-02700# A valid pipeline /must/ be+--     bound to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdDrawIndirectCount-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndirectCount-None-02859# There /must/ not have been+--     any calls to dynamic state setting commands for any state not+--     specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object+--     bound to the pipeline bind point used by this command, since that+--     pipeline was bound+--+-- -   #VUID-vkCmdDrawIndirectCount-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -145,21 +155,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndirectCount-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndirectCount-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdDrawIndirectCount-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -167,7 +179,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdDrawIndirectCount-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -175,46 +187,52 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource+-- -   #VUID-vkCmdDrawIndirectCount-commandBuffer-02707# If @commandBuffer@+--     is an unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawIndirectCount-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawIndirectCount-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawIndirectCount-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawIndirectCount-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawIndirectCount-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawIndirectCount-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdDrawIndirectCount-sparseImageInt64Atomics-04474# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -223,7 +241,7 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdDrawIndirectCount-sparseImageInt64Atomics-04475# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -232,7 +250,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   The current render pass /must/ be+-- -   #VUID-vkCmdDrawIndirectCount-renderPass-02684# The current render+--     pass /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible> --     with the @renderPass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure@@ -240,25 +259,32 @@ --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the+-- -   #VUID-vkCmdDrawIndirectCount-subpass-02685# The subpass index of the+--     current render pass /must/ be equal to the @subpass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure --     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set+-- -   #VUID-vkCmdDrawIndirectCount-None-02686# Every input attachment used+--     by the current subpass /must/ be bound to the pipeline via a+--     descriptor set ----- -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command+-- -   #VUID-vkCmdDrawIndirectCount-None-04584# Image subresources used as+--     attachments in the current render pass /must/ not be accessed in any+--     way other than as an attachment by this command, except for cases+--     involving read-only access to depth\/stencil attachments as+--     described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter ----- -   If the draw is recorded in a render pass instance with multiview---     enabled, the maximum instance index /must/ be less than or equal to+-- -   #VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688# If the+--     draw is recorded in a render pass instance with multiview enabled,+--     the maximum instance index /must/ be less than or equal to --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@ ----- -   If the bound graphics pipeline was created with+-- -   #VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689# If the+--     bound graphics pipeline was created with --     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@ --     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass --     has a depth\/stencil attachment, then that attachment /must/ have@@ -266,7 +292,8 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' --     bit set ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-viewportCount-03417# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'@@ -279,7 +306,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-scissorCount-03418# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -292,7 +320,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with both the+-- -   #VUID-vkCmdDrawIndirectCount-viewportCount-03419# If the bound+--     graphics pipeline state was created with both the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -306,7 +335,8 @@ --     /must/ match the @scissorCount@ parameter of --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-viewportCount-04137# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -317,7 +347,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-viewportCount-04138# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -328,7 +359,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-viewportCount-04139# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -339,7 +371,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-viewportCount-04140# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -350,7 +383,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-VkPipelineVieportCreateInfo-04141# If+--     the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'@@ -361,7 +395,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-VkPipelineVieportCreateInfo-04142# If+--     the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'@@ -372,7 +407,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectCount-primitiveTopology-03420# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT' --     dynamic state enabled then --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'@@ -385,7 +421,8 @@ --     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ --     state ----- -   If the+-- -   #VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports> --     limit is not supported, the bound graphics pipeline was created with --     the@@ -399,91 +436,106 @@ --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' --     /must/ be @1@ ----- -   All vertex input bindings accessed via vertex input variables---     declared in the vertex shader entry point’s interface /must/ have---     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers---     bound+-- -   #VUID-vkCmdDrawIndirectCount-None-04007# All vertex input bindings+--     accessed via vertex input variables declared in the vertex shader+--     entry point’s interface /must/ have either valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound ----- -   If the+-- -   #VUID-vkCmdDrawIndirectCount-None-04008# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor> --     feature is not enabled, all vertex input bindings accessed via --     vertex input variables declared in the vertex shader entry point’s --     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in+-- -   #VUID-vkCmdDrawIndirectCount-None-02721# For a given vertex buffer+--     binding, any attribute data fetched /must/ be entirely contained+--     within the corresponding vertex buffer binding, as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???> ----- -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-vkCmdDrawIndirectCount-buffer-02708# If @buffer@ is non-sparse+--     then it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @buffer@ /must/ have been created with the+-- -   #VUID-vkCmdDrawIndirectCount-buffer-02709# @buffer@ /must/ have been+--     created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   @offset@ /must/ be a multiple of @4@+-- -   #VUID-vkCmdDrawIndirectCount-offset-02710# @offset@ /must/ be a+--     multiple of @4@ ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdDrawIndirectCount-commandBuffer-02711# @commandBuffer@+--     /must/ not be a protected command buffer ----- -   If @countBuffer@ is non-sparse then it /must/ be bound completely---     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'---     object+-- -   #VUID-vkCmdDrawIndirectCount-countBuffer-02714# If @countBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @countBuffer@ /must/ have been created with the+-- -   #VUID-vkCmdDrawIndirectCount-countBuffer-02715# @countBuffer@ /must/+--     have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   @countBufferOffset@ /must/ be a multiple of @4@+-- -   #VUID-vkCmdDrawIndirectCount-countBufferOffset-02716#+--     @countBufferOffset@ /must/ be a multiple of @4@ ----- -   The count stored in @countBuffer@ /must/ be less than or equal to+-- -   #VUID-vkCmdDrawIndirectCount-countBuffer-02717# The count stored in+--     @countBuffer@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@ ----- -   (@countBufferOffset@ + @sizeof@(uint32_t)) /must/ be less than or+-- -   #VUID-vkCmdDrawIndirectCount-countBufferOffset-04129#+--     (@countBufferOffset@ + @sizeof@(uint32_t)) /must/ be less than or --     equal to the size of @countBuffer@ ----- -   If+-- -   #VUID-vkCmdDrawIndirectCount-None-04445# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectCount drawIndirectCount> --     is not enabled this function /must/ not be used ----- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or---     equal to sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand')+-- -   #VUID-vkCmdDrawIndirectCount-stride-03110# @stride@ /must/ be a+--     multiple of @4@ and /must/ be greater than or equal to+--     sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand') ----- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×---     (@maxDrawCount@ - 1) + @offset@ +---     sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be---     less than or equal to the size of @buffer@+-- -   #VUID-vkCmdDrawIndirectCount-maxDrawCount-03111# If @maxDrawCount@+--     is greater than or equal to @1@, (@stride@ × (@maxDrawCount@ - 1) ++--     @offset@ + sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand'))+--     /must/ be less than or equal to the size of @buffer@ ----- -   If the count stored in @countBuffer@ is equal to @1@, (@offset@ ++-- -   #VUID-vkCmdDrawIndirectCount-countBuffer-03121# If the count stored+--     in @countBuffer@ is equal to @1@, (@offset@ + --     sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be --     less than or equal to the size of @buffer@ ----- -   If the count stored in @countBuffer@ is greater than @1@, (@stride@---     × (@drawCount@ - 1) + @offset@ +---     sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand')) /must/ be---     less than or equal to the size of @buffer@+-- -   #VUID-vkCmdDrawIndirectCount-countBuffer-03122# If the count stored+--     in @countBuffer@ is greater than @1@, (@stride@ × (@drawCount@ - 1)+--     + @offset@ + sizeof('Vulkan.Core10.OtherTypes.DrawIndirectCommand'))+--     /must/ be less than or equal to the size of @buffer@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdDrawIndirectCount-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkCmdDrawIndirectCount-buffer-parameter# @buffer@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @countBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'---     handle+-- -   #VUID-vkCmdDrawIndirectCount-countBuffer-parameter# @countBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDrawIndirectCount-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdDrawIndirectCount-renderpass# This command /must/ only be+--     called inside of a render pass instance ----- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have---     been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdDrawIndirectCount-commonparent# Each of @buffer@,+--     @commandBuffer@, and @countBuffer@ /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -557,7 +609,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -566,20 +619,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -588,7 +644,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -602,23 +659,25 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdDrawIndexedIndirectCount-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02697# For each set /n/+--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'+--     bound to the pipeline bind point used by this command, a descriptor+--     set /must/ have been bound to /n/ at the same pipeline bind point,+--     with a 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for+--     set /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02698# For each push+--     constant that is statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command, a push constant value /must/ have been set for --     the same pipeline bind point, with a@@ -627,28 +686,32 @@ --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02699# Descriptors in each+--     bound descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02700# A valid pipeline+--     /must/ be bound to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02859# There /must/ not+--     have been any calls to dynamic state setting commands for any state+--     not specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command, since+--     that pipeline was bound+--+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -660,21 +723,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -682,7 +747,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -690,46 +755,54 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource+-- -   #VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707# If+--     @commandBuffer@ is an unprotected command buffer, any resource --     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the --     pipeline bind point used by this command /must/ not be a protected --     resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawIndexedIndirectCount-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawIndexedIndirectCount-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawIndexedIndirectCount-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawIndexedIndirectCount-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawIndexedIndirectCount-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-sparseImageInt64Atomics-04474#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -738,7 +811,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-sparseImageInt64Atomics-04475#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -747,7 +821,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   The current render pass /must/ be+-- -   #VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684# The current+--     render pass /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible> --     with the @renderPass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure@@ -755,25 +830,32 @@ --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- -   #VUID-vkCmdDrawIndexedIndirectCount-subpass-02685# The subpass index+--     of the current render pass /must/ be equal to the @subpass@ member+--     of the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure --     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02686# Every input+--     attachment used by the current subpass /must/ be bound to the+--     pipeline via a descriptor set ----- -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-04584# Image subresources+--     used as attachments in the current render pass /must/ not be+--     accessed in any way other than as an attachment by this command,+--     except for cases involving read-only access to depth\/stencil+--     attachments as described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter ----- -   If the draw is recorded in a render pass instance with multiview+-- -   #VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688#+--     If the draw is recorded in a render pass instance with multiview --     enabled, the maximum instance index /must/ be less than or equal to --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@ ----- -   If the bound graphics pipeline was created with+-- -   #VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689# If+--     the bound graphics pipeline was created with --     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@ --     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass --     has a depth\/stencil attachment, then that attachment /must/ have@@ -781,7 +863,8 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' --     bit set ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'@@ -794,7 +877,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -807,7 +891,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with both the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419# If the+--     bound graphics pipeline state was created with both the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -821,7 +906,8 @@ --     /must/ match the @scissorCount@ parameter of --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-viewportCount-04137# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -832,7 +918,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-viewportCount-04138# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -843,7 +930,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-viewportCount-04139# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -854,7 +942,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-viewportCount-04140# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -865,7 +954,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-VkPipelineVieportCreateInfo-04141#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'@@ -876,7 +966,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-VkPipelineVieportCreateInfo-04142#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'@@ -887,7 +978,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT' --     dynamic state enabled then --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'@@ -900,7 +992,8 @@ --     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ --     state ----- -   If the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports> --     limit is not supported, the bound graphics pipeline was created with --     the@@ -914,92 +1007,110 @@ --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' --     /must/ be @1@ ----- -   All vertex input bindings accessed via vertex input variables---     declared in the vertex shader entry point’s interface /must/ have---     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers---     bound+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-04007# All vertex input+--     bindings accessed via vertex input variables declared in the vertex+--     shader entry point’s interface /must/ have either valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound ----- -   If the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-04008# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor> --     feature is not enabled, all vertex input bindings accessed via --     vertex input variables declared in the vertex shader entry point’s --     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-02721# For a given vertex+--     buffer binding, any attribute data fetched /must/ be entirely+--     contained within the corresponding vertex buffer binding, as+--     described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???> ----- -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-vkCmdDrawIndexedIndirectCount-buffer-02708# If @buffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @buffer@ /must/ have been created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-buffer-02709# @buffer@ /must/+--     have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   @offset@ /must/ be a multiple of @4@+-- -   #VUID-vkCmdDrawIndexedIndirectCount-offset-02710# @offset@ /must/ be+--     a multiple of @4@ ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711#+--     @commandBuffer@ /must/ not be a protected command buffer ----- -   If @countBuffer@ is non-sparse then it /must/ be bound completely---     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'---     object+-- -   #VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714# If+--     @countBuffer@ is non-sparse then it /must/ be bound completely and+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @countBuffer@ /must/ have been created with the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715# @countBuffer@+--     /must/ have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   @countBufferOffset@ /must/ be a multiple of @4@+-- -   #VUID-vkCmdDrawIndexedIndirectCount-countBufferOffset-02716#+--     @countBufferOffset@ /must/ be a multiple of @4@ ----- -   The count stored in @countBuffer@ /must/ be less than or equal to+-- -   #VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02717# The count+--     stored in @countBuffer@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@ ----- -   (@countBufferOffset@ + @sizeof@(uint32_t)) /must/ be less than or+-- -   #VUID-vkCmdDrawIndexedIndirectCount-countBufferOffset-04129#+--     (@countBufferOffset@ + @sizeof@(uint32_t)) /must/ be less than or --     equal to the size of @countBuffer@ ----- -   If+-- -   #VUID-vkCmdDrawIndexedIndirectCount-None-04445# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectCount drawIndirectCount> --     is not enabled this function /must/ not be used ----- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or---     equal to+-- -   #VUID-vkCmdDrawIndexedIndirectCount-stride-03142# @stride@ /must/ be+--     a multiple of @4@ and /must/ be greater than or equal to --     sizeof('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand') ----- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×+-- -   #VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143# If+--     @maxDrawCount@ is greater than or equal to @1@, (@stride@ × --     (@maxDrawCount@ - 1) + @offset@ + --     sizeof('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')) --     /must/ be less than or equal to the size of @buffer@ ----- -   If count stored in @countBuffer@ is equal to @1@, (@offset@ ++-- -   #VUID-vkCmdDrawIndexedIndirectCount-countBuffer-03153# If count+--     stored in @countBuffer@ is equal to @1@, (@offset@ + --     sizeof('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')) --     /must/ be less than or equal to the size of @buffer@ ----- -   If count stored in @countBuffer@ is greater than @1@, (@stride@ ×+-- -   #VUID-vkCmdDrawIndexedIndirectCount-countBuffer-03154# If count+--     stored in @countBuffer@ is greater than @1@, (@stride@ × --     (@drawCount@ - 1) + @offset@ + --     sizeof('Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand')) --     /must/ be less than or equal to the size of @buffer@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkCmdDrawIndexedIndirectCount-buffer-parameter# @buffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @countBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'+-- -   #VUID-vkCmdDrawIndexedIndirectCount-countBuffer-parameter#+--     @countBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' --     handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdDrawIndexedIndirectCount-renderpass# This command /must/+--     only be called inside of a render pass instance ----- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have---     been created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdDrawIndexedIndirectCount-commonparent# Each of @buffer@,+--     @commandBuffer@, and @countBuffer@ /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --
src/Vulkan/Core12/Promoted_From_VK_KHR_image_format_list.hs view
@@ -41,10 +41,11 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageFormatListCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO' ----- -   If @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid+-- -   #VUID-VkImageFormatListCreateInfo-pViewFormats-parameter# If+--     @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid --     pointer to an array of @viewFormatCount@ valid --     'Vulkan.Core10.Enums.Format.Format' values --
src/Vulkan/Core12/Promoted_From_VK_KHR_imageless_framebuffer.hs view
@@ -73,8 +73,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceImagelessFramebufferFeatures = PhysicalDeviceImagelessFramebufferFeatures-  { -- | @imagelessFramebuffer@ indicates that the implementation supports-    -- specifying the image view for attachments at render pass begin time via+  { -- | #extension-features-imagelessFramebuffer# @imagelessFramebuffer@+    -- indicates that the implementation supports specifying the image view for+    -- attachments at render pass begin time via     -- 'RenderPassAttachmentBeginInfo'.     imagelessFramebuffer :: Bool }   deriving (Typeable, Eq)@@ -120,10 +121,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFramebufferAttachmentsCreateInfo-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO' ----- -   If @attachmentImageInfoCount@ is not @0@, @pAttachmentImageInfos@+-- -   #VUID-VkFramebufferAttachmentsCreateInfo-pAttachmentImageInfos-parameter#+--     If @attachmentImageInfoCount@ is not @0@, @pAttachmentImageInfos@ --     /must/ be a valid pointer to an array of @attachmentImageInfoCount@ --     valid 'FramebufferAttachmentImageInfo' structures --@@ -187,20 +190,26 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFramebufferAttachmentImageInfo-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkFramebufferAttachmentImageInfo-pNext-pNext# @pNext@ /must/+--     be @NULL@ ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkFramebufferAttachmentImageInfo-flags-parameter# @flags@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values ----- -   @usage@ /must/ be a valid combination of+-- -   #VUID-VkFramebufferAttachmentImageInfo-usage-parameter# @usage@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values ----- -   @usage@ /must/ not be @0@+-- -   #VUID-VkFramebufferAttachmentImageInfo-usage-requiredbitmask#+--     @usage@ /must/ not be @0@ ----- -   If @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid+-- -   #VUID-VkFramebufferAttachmentImageInfo-pViewFormats-parameter# If+--     @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid --     pointer to an array of @viewFormatCount@ valid --     'Vulkan.Core10.Enums.Format.Format' values --@@ -296,22 +305,25 @@ -- -- == Valid Usage ----- -   Each element of @pAttachments@ /must/ only specify a single mip---     level+-- -   #VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03218# Each+--     element of @pAttachments@ /must/ only specify a single mip level ----- -   Each element of @pAttachments@ /must/ have been created with the---     identity swizzle+-- -   #VUID-VkRenderPassAttachmentBeginInfo-pAttachments-03219# Each+--     element of @pAttachments@ /must/ have been created with the identity+--     swizzle ----- -   Each element of @pAttachments@ /must/ have been created with+-- -   #VUID-VkRenderPassAttachmentBeginInfo-pAttachments-04114# Each+--     element of @pAttachments@ /must/ have been created with --     'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@viewType@ not equal --     to 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRenderPassAttachmentBeginInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO' ----- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid+-- -   #VUID-VkRenderPassAttachmentBeginInfo-pAttachments-parameter# If+--     @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid --     pointer to an array of @attachmentCount@ valid --     'Vulkan.Core10.Handles.ImageView' handles --
src/Vulkan/Core12/Promoted_From_VK_KHR_separate_depth_stencil_layouts.hs view
@@ -58,7 +58,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceSeparateDepthStencilLayoutsFeatures = PhysicalDeviceSeparateDepthStencilLayoutsFeatures-  { -- | @separateDepthStencilLayouts@ indicates whether the implementation+  { -- | #extension-features-separateDepthStencilLayouts#+    -- @separateDepthStencilLayouts@ indicates whether the implementation     -- supports a 'Vulkan.Core10.OtherTypes.ImageMemoryBarrier' for a     -- depth\/stencil image with only one of     -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or@@ -123,6 +124,7 @@     -- specifying the layout the stencil aspect of the attachment uses during     -- the subpass.     --+    -- #VUID-VkAttachmentReferenceStencilLayout-stencilLayout-03318#     -- @stencilLayout@ /must/ not be     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED',     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED',@@ -135,6 +137,7 @@     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',     -- or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR'     --+    -- #VUID-VkAttachmentReferenceStencilLayout-stencilLayout-parameter#     -- @stencilLayout@ /must/ be a valid     -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value     stencilLayout :: ImageLayout }@@ -190,6 +193,7 @@     -- attachment image subresource will be in when a render pass instance     -- begins.     --+    -- #VUID-VkAttachmentDescriptionStencilLayout-stencilInitialLayout-03308#     -- @stencilInitialLayout@ /must/ not be     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL',     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',@@ -200,6 +204,7 @@     -- or     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'     --+    -- #VUID-VkAttachmentDescriptionStencilLayout-stencilInitialLayout-parameter#     -- @stencilInitialLayout@ /must/ be a valid     -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value     stencilInitialLayout :: ImageLayout@@ -207,6 +212,7 @@     -- image subresource will be transitioned to when a render pass instance     -- ends.     --+    -- #VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03309#     -- @stencilFinalLayout@ /must/ not be     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL',     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL',@@ -217,10 +223,12 @@     -- or     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL'     --+    -- #VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-03310#     -- @stencilFinalLayout@ /must/ not be     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_UNDEFINED' or     -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PREINITIALIZED'     --+    -- #VUID-VkAttachmentDescriptionStencilLayout-stencilFinalLayout-parameter#     -- @stencilFinalLayout@ /must/ be a valid     -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value     stencilFinalLayout :: ImageLayout
src/Vulkan/Core12/Promoted_From_VK_KHR_shader_atomic_int64.hs view
@@ -35,11 +35,13 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderAtomicInt64Features = PhysicalDeviceShaderAtomicInt64Features-  { -- | @shaderBufferInt64Atomics@ indicates whether shaders /can/ perform-    -- 64-bit unsigned and signed integer atomic operations on buffers.+  { -- | #extension-features-shaderBufferInt64Atomics# @shaderBufferInt64Atomics@+    -- indicates whether shaders /can/ perform 64-bit unsigned and signed+    -- integer atomic operations on buffers.     shaderBufferInt64Atomics :: Bool-  , -- | @shaderSharedInt64Atomics@ indicates whether shaders /can/ perform-    -- 64-bit unsigned and signed integer atomic operations on shared memory.+  , -- | #extension-features-shaderSharedInt64Atomics# @shaderSharedInt64Atomics@+    -- indicates whether shaders /can/ perform 64-bit unsigned and signed+    -- integer atomic operations on shared memory.     shaderSharedInt64Atomics :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float16_int8.hs view
@@ -35,24 +35,25 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderFloat16Int8Features = PhysicalDeviceShaderFloat16Int8Features-  { -- | @shaderFloat16@ indicates whether 16-bit floats (halfs) are supported in-    -- shader code. This also indicates whether shader modules /can/ declare-    -- the @Float16@ capability. However, this only enables a subset of the-    -- storage classes that SPIR-V allows for the @Float16@ SPIR-V capability:-    -- Declaring and using 16-bit floats in the @Private@, @Workgroup@, and-    -- @Function@ storage classes is enabled, while declaring them in the-    -- interface storage classes (e.g., @UniformConstant@, @Uniform@,-    -- @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not enabled.+  { -- | #extension-features-shaderFloat16# @shaderFloat16@ indicates whether+    -- 16-bit floats (halfs) are supported in shader code. This also indicates+    -- whether shader modules /can/ declare the @Float16@ capability. However,+    -- this only enables a subset of the storage classes that SPIR-V allows for+    -- the @Float16@ SPIR-V capability: Declaring and using 16-bit floats in+    -- the @Private@, @Workgroup@, and @Function@ storage classes is enabled,+    -- while declaring them in the interface storage classes (e.g.,+    -- @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@, and+    -- @PushConstant@) is not enabled.     shaderFloat16 :: Bool-  , -- | @shaderInt8@ indicates whether 8-bit integers (signed and unsigned) are-    -- supported in shader code. This also indicates whether shader modules-    -- /can/ declare the @Int8@ capability. However, this only enables a subset-    -- of the storage classes that SPIR-V allows for the @Int8@ SPIR-V-    -- capability: Declaring and using 8-bit integers in the @Private@,-    -- @Workgroup@, and @Function@ storage classes is enabled, while declaring-    -- them in the interface storage classes (e.g., @UniformConstant@,-    -- @Uniform@, @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is-    -- not enabled.+  , -- | #extension-features-shaderInt8# @shaderInt8@ indicates whether 8-bit+    -- integers (signed and unsigned) are supported in shader code. This also+    -- indicates whether shader modules /can/ declare the @Int8@ capability.+    -- However, this only enables a subset of the storage classes that SPIR-V+    -- allows for the @Int8@ SPIR-V capability: Declaring and using 8-bit+    -- integers in the @Private@, @Workgroup@, and @Function@ storage classes+    -- is enabled, while declaring them in the interface storage classes (e.g.,+    -- @UniformConstant@, @Uniform@, @StorageBuffer@, @Input@, @Output@, and+    -- @PushConstant@) is not enabled.     shaderInt8 :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Core12/Promoted_From_VK_KHR_shader_float_controls.hs view
@@ -51,95 +51,112 @@ -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFloatControlsProperties = PhysicalDeviceFloatControlsProperties-  { -- | @denormBehaviorIndependence@ is a+  { -- | #extension-features-denormBehaviorIndependence#+    -- @denormBehaviorIndependence@ is a     -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'     -- value indicating whether, and how, denorm behavior can be set     -- independently for different bit widths.     denormBehaviorIndependence :: ShaderFloatControlsIndependence-  , -- | @roundingModeIndependence@ is a+  , -- | #extension-features-roundingModeIndependence# @roundingModeIndependence@+    -- is a     -- 'Vulkan.Core12.Enums.ShaderFloatControlsIndependence.ShaderFloatControlsIndependence'     -- value indicating whether, and how, rounding modes can be set     -- independently for different bit widths.     roundingModeIndependence :: ShaderFloatControlsIndependence-  , -- | @shaderSignedZeroInfNanPreserveFloat16@ is a boolean value indicating+  , -- | #extension-limits-shaderSignedZeroInfNanPreserveFloat16#+    -- @shaderSignedZeroInfNanPreserveFloat16@ is a boolean value indicating     -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in     -- 16-bit floating-point computations. It also indicates whether the     -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 16-bit     -- floating-point types.     shaderSignedZeroInfNanPreserveFloat16 :: Bool-  , -- | @shaderSignedZeroInfNanPreserveFloat32@ is a boolean value indicating+  , -- | #extension-limits-shaderSignedZeroInfNanPreserveFloat32#+    -- @shaderSignedZeroInfNanPreserveFloat32@ is a boolean value indicating     -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in     -- 32-bit floating-point computations. It also indicates whether the     -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 32-bit     -- floating-point types.     shaderSignedZeroInfNanPreserveFloat32 :: Bool-  , -- | @shaderSignedZeroInfNanPreserveFloat64@ is a boolean value indicating+  , -- | #extension-limits-shaderSignedZeroInfNanPreserveFloat64#+    -- @shaderSignedZeroInfNanPreserveFloat64@ is a boolean value indicating     -- whether sign of a zero, Nans and \(\pm\infty\) /can/ be preserved in     -- 64-bit floating-point computations. It also indicates whether the     -- @SignedZeroInfNanPreserve@ execution mode /can/ be used for 64-bit     -- floating-point types.     shaderSignedZeroInfNanPreserveFloat64 :: Bool-  , -- | @shaderDenormPreserveFloat16@ is a boolean value indicating whether+  , -- | #extension-limits-shaderDenormPreserveFloat16#+    -- @shaderDenormPreserveFloat16@ is a boolean value indicating whether     -- denormals /can/ be preserved in 16-bit floating-point computations. It     -- also indicates whether the @DenormPreserve@ execution mode /can/ be used     -- for 16-bit floating-point types.     shaderDenormPreserveFloat16 :: Bool-  , -- | @shaderDenormPreserveFloat32@ is a boolean value indicating whether+  , -- | #extension-limits-shaderDenormPreserveFloat32#+    -- @shaderDenormPreserveFloat32@ is a boolean value indicating whether     -- denormals /can/ be preserved in 32-bit floating-point computations. It     -- also indicates whether the @DenormPreserve@ execution mode /can/ be used     -- for 32-bit floating-point types.     shaderDenormPreserveFloat32 :: Bool-  , -- | @shaderDenormPreserveFloat64@ is a boolean value indicating whether+  , -- | #extension-limits-shaderDenormPreserveFloat64#+    -- @shaderDenormPreserveFloat64@ is a boolean value indicating whether     -- denormals /can/ be preserved in 64-bit floating-point computations. It     -- also indicates whether the @DenormPreserve@ execution mode /can/ be used     -- for 64-bit floating-point types.     shaderDenormPreserveFloat64 :: Bool-  , -- | @shaderDenormFlushToZeroFloat16@ is a boolean value indicating whether+  , -- | #extension-limits-shaderDenormFlushToZeroFloat16#+    -- @shaderDenormFlushToZeroFloat16@ is a boolean value indicating whether     -- denormals /can/ be flushed to zero in 16-bit floating-point     -- computations. It also indicates whether the @DenormFlushToZero@     -- execution mode /can/ be used for 16-bit floating-point types.     shaderDenormFlushToZeroFloat16 :: Bool-  , -- | @shaderDenormFlushToZeroFloat32@ is a boolean value indicating whether+  , -- | #extension-limits-shaderDenormFlushToZeroFloat32#+    -- @shaderDenormFlushToZeroFloat32@ is a boolean value indicating whether     -- denormals /can/ be flushed to zero in 32-bit floating-point     -- computations. It also indicates whether the @DenormFlushToZero@     -- execution mode /can/ be used for 32-bit floating-point types.     shaderDenormFlushToZeroFloat32 :: Bool-  , -- | @shaderDenormFlushToZeroFloat64@ is a boolean value indicating whether+  , -- | #extension-limits-shaderDenormFlushToZeroFloat64#+    -- @shaderDenormFlushToZeroFloat64@ is a boolean value indicating whether     -- denormals /can/ be flushed to zero in 64-bit floating-point     -- computations. It also indicates whether the @DenormFlushToZero@     -- execution mode /can/ be used for 64-bit floating-point types.     shaderDenormFlushToZeroFloat64 :: Bool-  , -- | @shaderRoundingModeRTEFloat16@ is a boolean value indicating whether an+  , -- | #extension-limits-shaderRoundingModeRTEFloat16#+    -- @shaderRoundingModeRTEFloat16@ is a boolean value indicating whether an     -- implementation supports the round-to-nearest-even rounding mode for     -- 16-bit floating-point arithmetic and conversion instructions. It also     -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for     -- 16-bit floating-point types.     shaderRoundingModeRTEFloat16 :: Bool-  , -- | @shaderRoundingModeRTEFloat32@ is a boolean value indicating whether an+  , -- | #extension-limits-shaderRoundingModeRTEFloat32#+    -- @shaderRoundingModeRTEFloat32@ is a boolean value indicating whether an     -- implementation supports the round-to-nearest-even rounding mode for     -- 32-bit floating-point arithmetic and conversion instructions. It also     -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for     -- 32-bit floating-point types.     shaderRoundingModeRTEFloat32 :: Bool-  , -- | @shaderRoundingModeRTEFloat64@ is a boolean value indicating whether an+  , -- | #extension-limits-shaderRoundingModeRTEFloat64#+    -- @shaderRoundingModeRTEFloat64@ is a boolean value indicating whether an     -- implementation supports the round-to-nearest-even rounding mode for     -- 64-bit floating-point arithmetic and conversion instructions. It also     -- indicates whether the @RoundingModeRTE@ execution mode /can/ be used for     -- 64-bit floating-point types.     shaderRoundingModeRTEFloat64 :: Bool-  , -- | @shaderRoundingModeRTZFloat16@ is a boolean value indicating whether an+  , -- | #extension-limits-shaderRoundingModeRTZFloat16#+    -- @shaderRoundingModeRTZFloat16@ is a boolean value indicating whether an     -- implementation supports the round-towards-zero rounding mode for 16-bit     -- floating-point arithmetic and conversion instructions. It also indicates     -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 16-bit     -- floating-point types.     shaderRoundingModeRTZFloat16 :: Bool-  , -- | @shaderRoundingModeRTZFloat32@ is a boolean value indicating whether an+  , -- | #extension-limits-shaderRoundingModeRTZFloat32#+    -- @shaderRoundingModeRTZFloat32@ is a boolean value indicating whether an     -- implementation supports the round-towards-zero rounding mode for 32-bit     -- floating-point arithmetic and conversion instructions. It also indicates     -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 32-bit     -- floating-point types.     shaderRoundingModeRTZFloat32 :: Bool-  , -- | @shaderRoundingModeRTZFloat64@ is a boolean value indicating whether an+  , -- | #extension-limits-shaderRoundingModeRTZFloat64#+    -- @shaderRoundingModeRTZFloat64@ is a boolean value indicating whether an     -- implementation supports the round-towards-zero rounding mode for 64-bit     -- floating-point arithmetic and conversion instructions. It also indicates     -- whether the @RoundingModeRTZ@ execution mode /can/ be used for 64-bit
src/Vulkan/Core12/Promoted_From_VK_KHR_shader_subgroup_extended_types.hs view
@@ -51,7 +51,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderSubgroupExtendedTypesFeatures = PhysicalDeviceShaderSubgroupExtendedTypesFeatures-  { -- | @shaderSubgroupExtendedTypes@ is a boolean that specifies whether+  { -- | #extension-features-subgroup-extended-types#+    -- @shaderSubgroupExtendedTypes@ is a boolean that specifies whether     -- subgroup operations can use 8-bit integer, 16-bit integer, 64-bit     -- integer, 16-bit floating-point, and vectors of these types in     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-group-operations group operations>
src/Vulkan/Core12/Promoted_From_VK_KHR_timeline_semaphore.hs view
@@ -123,18 +123,21 @@                           . (MonadIO io)                          => -- | @device@ is the logical device that owns the semaphore.                             ---                            -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                            -- #VUID-vkGetSemaphoreCounterValue-device-parameter# @device@ /must/ be a+                            -- valid 'Vulkan.Core10.Handles.Device' handle                             Device                          -> -- | @semaphore@ is the handle of the semaphore to query.                             ---                            -- @semaphore@ /must/ have been created with a+                            -- #VUID-vkGetSemaphoreCounterValue-semaphore-03255# @semaphore@ /must/+                            -- have been created with a                             -- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of                             -- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'                             ---                            -- @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore' handle+                            -- #VUID-vkGetSemaphoreCounterValue-semaphore-parameter# @semaphore@ /must/+                            -- be a valid 'Vulkan.Core10.Handles.Semaphore' handle                             ---                            -- @semaphore@ /must/ have been created, allocated, or retrieved from-                            -- @device@+                            -- #VUID-vkGetSemaphoreCounterValue-semaphore-parent# @semaphore@ /must/+                            -- have been created, allocated, or retrieved from @device@                             Semaphore                          -> io (("value" ::: Word64)) getSemaphoreCounterValue device semaphore = liftIO . evalContT $ do@@ -167,13 +170,14 @@                               (FunPtr (Ptr Device_T -> Ptr SemaphoreWaitInfo -> Word64 -> IO Result) -> Ptr Device_T -> Ptr SemaphoreWaitInfo -> Word64 -> IO Result)                            -> -- | @device@ is the logical device that owns the semaphore.                               ---                              -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                              -- #VUID-vkWaitSemaphores-device-parameter# @device@ /must/ be a valid+                              -- 'Vulkan.Core10.Handles.Device' handle                               Device                            -> -- | @pWaitInfo@ is a pointer to a 'SemaphoreWaitInfo' structure containing                               -- information about the wait condition.                               ---                              -- @pWaitInfo@ /must/ be a valid pointer to a valid 'SemaphoreWaitInfo'-                              -- structure+                              -- #VUID-vkWaitSemaphores-pWaitInfo-parameter# @pWaitInfo@ /must/ be a+                              -- valid pointer to a valid 'SemaphoreWaitInfo' structure                               SemaphoreWaitInfo                            -> -- | @timeout@ is the timeout period in units of nanoseconds. @timeout@ is                               -- adjusted to the closest value allowed by the implementation-dependent@@ -241,13 +245,14 @@                 . (MonadIO io)                => -- | @device@ is the logical device that owns the semaphore.                   ---                  -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                  -- #VUID-vkWaitSemaphores-device-parameter# @device@ /must/ be a valid+                  -- 'Vulkan.Core10.Handles.Device' handle                   Device                -> -- | @pWaitInfo@ is a pointer to a 'SemaphoreWaitInfo' structure containing                   -- information about the wait condition.                   ---                  -- @pWaitInfo@ /must/ be a valid pointer to a valid 'SemaphoreWaitInfo'-                  -- structure+                  -- #VUID-vkWaitSemaphores-pWaitInfo-parameter# @pWaitInfo@ /must/ be a+                  -- valid pointer to a valid 'SemaphoreWaitInfo' structure                   SemaphoreWaitInfo                -> -- | @timeout@ is the timeout period in units of nanoseconds. @timeout@ is                   -- adjusted to the closest value allowed by the implementation-dependent@@ -262,13 +267,14 @@                     . (MonadIO io)                    => -- | @device@ is the logical device that owns the semaphore.                       ---                      -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                      -- #VUID-vkWaitSemaphores-device-parameter# @device@ /must/ be a valid+                      -- 'Vulkan.Core10.Handles.Device' handle                       Device                    -> -- | @pWaitInfo@ is a pointer to a 'SemaphoreWaitInfo' structure containing                       -- information about the wait condition.                       ---                      -- @pWaitInfo@ /must/ be a valid pointer to a valid 'SemaphoreWaitInfo'-                      -- structure+                      -- #VUID-vkWaitSemaphores-pWaitInfo-parameter# @pWaitInfo@ /must/ be a+                      -- valid pointer to a valid 'SemaphoreWaitInfo' structure                       SemaphoreWaitInfo                    -> -- | @timeout@ is the timeout period in units of nanoseconds. @timeout@ is                       -- adjusted to the closest value allowed by the implementation-dependent@@ -320,13 +326,14 @@                  . (MonadIO io)                 => -- | @device@ is the logical device that owns the semaphore.                    ---                   -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                   -- #VUID-vkSignalSemaphore-device-parameter# @device@ /must/ be a valid+                   -- 'Vulkan.Core10.Handles.Device' handle                    Device                 -> -- | @pSignalInfo@ is a pointer to a 'SemaphoreSignalInfo' structure                    -- containing information about the signal operation.                    ---                   -- @pSignalInfo@ /must/ be a valid pointer to a valid 'SemaphoreSignalInfo'-                   -- structure+                   -- #VUID-vkSignalSemaphore-pSignalInfo-parameter# @pSignalInfo@ /must/ be a+                   -- valid pointer to a valid 'SemaphoreSignalInfo' structure                    SemaphoreSignalInfo                 -> io () signalSemaphore device signalInfo = liftIO . evalContT $ do@@ -364,7 +371,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceTimelineSemaphoreFeatures = PhysicalDeviceTimelineSemaphoreFeatures-  { -- | @timelineSemaphore@ indicates whether semaphores created with a+  { -- | #extension-features-timelineSemaphore# @timelineSemaphore@ indicates+    -- whether semaphores created with a     -- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of     -- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' are     -- supported.@@ -421,7 +429,8 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceTimelineSemaphoreProperties = PhysicalDeviceTimelineSemaphoreProperties-  { -- | @maxTimelineSemaphoreValueDifference@ indicates the maximum difference+  { -- | #extension-limits-maxTimelineSemaphoreValueDifference#+    -- @maxTimelineSemaphoreValueDifference@ indicates the maximum difference     -- allowed by the implementation between the current value of a timeline     -- semaphore and any pending signal or wait operations.     maxTimelineSemaphoreValueDifference :: Word64 }@@ -468,20 +477,22 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSemaphoreTypeCreateInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO' ----- -   @semaphoreType@ /must/ be a valid+-- -   #VUID-VkSemaphoreTypeCreateInfo-semaphoreType-parameter#+--     @semaphoreType@ /must/ be a valid --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' value -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkSemaphoreTypeCreateInfo-timelineSemaphore-03252# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-timelineSemaphore timelineSemaphore> --     feature is not enabled, @semaphoreType@ /must/ not equal --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' ----- -   If @semaphoreType@ is+-- -   #VUID-VkSemaphoreTypeCreateInfo-semaphoreType-03279# If+--     @semaphoreType@ is --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY', --     @initialValue@ /must/ be zero --@@ -561,14 +572,16 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkTimelineSemaphoreSubmitInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO' ----- -   If @waitSemaphoreValueCount@ is not @0@, and @pWaitSemaphoreValues@+-- -   #VUID-VkTimelineSemaphoreSubmitInfo-pWaitSemaphoreValues-parameter#+--     If @waitSemaphoreValueCount@ is not @0@, and @pWaitSemaphoreValues@ --     is not @NULL@, @pWaitSemaphoreValues@ /must/ be a valid pointer to --     an array of @waitSemaphoreValueCount@ @uint64_t@ values ----- -   If @signalSemaphoreValueCount@ is not @0@, and+-- -   #VUID-VkTimelineSemaphoreSubmitInfo-pSignalSemaphoreValues-parameter#+--     If @signalSemaphoreValueCount@ is not @0@, and --     @pSignalSemaphoreValues@ is not @NULL@, @pSignalSemaphoreValues@ --     /must/ be a valid pointer to an array of @signalSemaphoreValueCount@ --     @uint64_t@ values@@ -668,29 +681,32 @@ -- -- == Valid Usage ----- -   All of the elements of @pSemaphores@ /must/ reference a semaphore---     that was created with a+-- -   #VUID-VkSemaphoreWaitInfo-pSemaphores-03256# All of the elements of+--     @pSemaphores@ /must/ reference a semaphore that was created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSemaphoreWaitInfo-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkSemaphoreWaitInfo-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkSemaphoreWaitInfo-flags-parameter# @flags@ /must/ be a valid+--     combination of --     'Vulkan.Core12.Enums.SemaphoreWaitFlagBits.SemaphoreWaitFlagBits' --     values ----- -   @pSemaphores@ /must/ be a valid pointer to an array of---     @semaphoreCount@ valid 'Vulkan.Core10.Handles.Semaphore' handles+-- -   #VUID-VkSemaphoreWaitInfo-pSemaphores-parameter# @pSemaphores@+--     /must/ be a valid pointer to an array of @semaphoreCount@ valid+--     'Vulkan.Core10.Handles.Semaphore' handles ----- -   @pValues@ /must/ be a valid pointer to an array of @semaphoreCount@---     @uint64_t@ values+-- -   #VUID-VkSemaphoreWaitInfo-pValues-parameter# @pValues@ /must/ be a+--     valid pointer to an array of @semaphoreCount@ @uint64_t@ values ----- -   @semaphoreCount@ /must/ be greater than @0@+-- -   #VUID-VkSemaphoreWaitInfo-semaphoreCount-arraylength#+--     @semaphoreCount@ /must/ be greater than @0@ -- -- = See Also --@@ -777,23 +793,25 @@ data SemaphoreSignalInfo = SemaphoreSignalInfo   { -- | @semaphore@ is the handle of the semaphore to signal.     ---    -- @semaphore@ /must/ have been created with a-    -- 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of+    -- #VUID-VkSemaphoreSignalInfo-semaphore-03257# @semaphore@ /must/ have+    -- been created with a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of     -- 'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_TIMELINE'     ---    -- @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore' handle+    -- #VUID-VkSemaphoreSignalInfo-semaphore-parameter# @semaphore@ /must/ be a+    -- valid 'Vulkan.Core10.Handles.Semaphore' handle     semaphore :: Semaphore   , -- | @value@ is the value to signal.     ---    -- @value@ /must/ have a value greater than the current value of the-    -- semaphore+    -- #VUID-VkSemaphoreSignalInfo-value-03258# @value@ /must/ have a value+    -- greater than the current value of the semaphore     ---    -- @value@ /must/ be less than the value of any pending semaphore signal-    -- operations+    -- #VUID-VkSemaphoreSignalInfo-value-03259# @value@ /must/ be less than the+    -- value of any pending semaphore signal operations     ---    -- @value@ /must/ have a value which does not differ from the current value-    -- of the semaphore or the value of any outstanding semaphore wait or-    -- signal operation on @semaphore@ by more than+    -- #VUID-VkSemaphoreSignalInfo-value-03260# @value@ /must/ have a value+    -- which does not differ from the current value of the semaphore or the+    -- value of any outstanding semaphore wait or signal operation on+    -- @semaphore@ by more than     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxTimelineSemaphoreValueDifference maxTimelineSemaphoreValueDifference>     value :: Word64   }
src/Vulkan/Core12/Promoted_From_VK_KHR_uniform_buffer_standard_layout.hs view
@@ -50,7 +50,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceUniformBufferStandardLayoutFeatures = PhysicalDeviceUniformBufferStandardLayoutFeatures-  { -- | @uniformBufferStandardLayout@ indicates that the implementation supports+  { -- | #extension-features-uniformBufferStandardLayout#+    -- @uniformBufferStandardLayout@ indicates that the implementation supports     -- the same layouts for uniform buffers as for storage and other kinds of     -- buffers. See     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources-standard-layout Standard Buffer Layout>.
src/Vulkan/Core12/Promoted_From_VK_KHR_vulkan_memory_model.hs view
@@ -35,18 +35,20 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceVulkanMemoryModelFeatures = PhysicalDeviceVulkanMemoryModelFeatures-  { -- | @vulkanMemoryModel@ indicates whether the Vulkan Memory Model is-    -- supported, as defined in+  { -- | #extension-features-vulkanMemoryModel# @vulkanMemoryModel@ indicates+    -- whether the Vulkan Memory Model is supported, as defined in     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model Vulkan Memory Model>.     -- This also indicates whether shader modules /can/ declare the     -- @VulkanMemoryModel@ capability.     vulkanMemoryModel :: Bool-  , -- | @vulkanMemoryModelDeviceScope@ indicates whether the Vulkan Memory Model+  , -- | #extension-features-vulkanMemoryModelDeviceScope#+    -- @vulkanMemoryModelDeviceScope@ indicates whether the Vulkan Memory Model     -- can use 'Vulkan.Core10.Handles.Device' scope synchronization. This also     -- indicates whether shader modules /can/ declare the     -- @VulkanMemoryModelDeviceScope@ capability.     vulkanMemoryModelDeviceScope :: Bool-  , -- | @vulkanMemoryModelAvailabilityVisibilityChains@ indicates whether the+  , -- | #extension-features-vulkanMemoryModelAvailabilityVisibilityChains#+    -- @vulkanMemoryModelAvailabilityVisibilityChains@ indicates whether the     -- Vulkan Memory Model can use     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-model-availability-visibility availability and visibility chains>     -- with more than one element.
src/Vulkan/Dynamic.hs view
@@ -158,6 +158,7 @@ import {-# SOURCE #-} Vulkan.Core10.DeviceInitialization (FormatProperties) import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (FormatProperties2) import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (FragmentShadingRateCombinerOpKHR)+import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (FragmentShadingRateNV) import {-# SOURCE #-} Vulkan.Core10.Handles (Framebuffer) import {-# SOURCE #-} Vulkan.Core10.Pass (FramebufferCreateInfo) import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (FramebufferMixedSamplesCombinationNV)@@ -931,6 +932,7 @@   , pVkCmdCopyImageToBuffer2KHR :: FunPtr (Ptr CommandBuffer_T -> ("pCopyImageToBufferInfo" ::: Ptr CopyImageToBufferInfo2KHR) -> IO ())   , pVkCmdResolveImage2KHR :: FunPtr (Ptr CommandBuffer_T -> ("pResolveImageInfo" ::: Ptr ResolveImageInfo2KHR) -> IO ())   , pVkCmdSetFragmentShadingRateKHR :: FunPtr (Ptr CommandBuffer_T -> ("pFragmentSize" ::: Ptr Extent2D) -> ("combinerOps" ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)) -> IO ())+  , pVkCmdSetFragmentShadingRateEnumNV :: FunPtr (Ptr CommandBuffer_T -> FragmentShadingRateNV -> ("combinerOps" ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)) -> IO ())   }  deriving instance Eq DeviceCmds@@ -976,6 +978,7 @@     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr     nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr nullFunPtr+    nullFunPtr  foreign import ccall #if !defined(SAFE_FOREIGN_CALLS)@@ -1300,6 +1303,7 @@   vkCmdCopyImageToBuffer2KHR <- getDeviceProcAddr' handle (Ptr "vkCmdCopyImageToBuffer2KHR"#)   vkCmdResolveImage2KHR <- getDeviceProcAddr' handle (Ptr "vkCmdResolveImage2KHR"#)   vkCmdSetFragmentShadingRateKHR <- getDeviceProcAddr' handle (Ptr "vkCmdSetFragmentShadingRateKHR"#)+  vkCmdSetFragmentShadingRateEnumNV <- getDeviceProcAddr' handle (Ptr "vkCmdSetFragmentShadingRateEnumNV"#)   pure $ DeviceCmds handle     (castFunPtr @_ @(Ptr Device_T -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction) vkGetDeviceProcAddr)     (castFunPtr @_ @(Ptr Device_T -> ("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) vkDestroyDevice)@@ -1612,4 +1616,5 @@     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pCopyImageToBufferInfo" ::: Ptr CopyImageToBufferInfo2KHR) -> IO ()) vkCmdCopyImageToBuffer2KHR)     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pResolveImageInfo" ::: Ptr ResolveImageInfo2KHR) -> IO ()) vkCmdResolveImage2KHR)     (castFunPtr @_ @(Ptr CommandBuffer_T -> ("pFragmentSize" ::: Ptr Extent2D) -> ("combinerOps" ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)) -> IO ()) vkCmdSetFragmentShadingRateKHR)+    (castFunPtr @_ @(Ptr CommandBuffer_T -> FragmentShadingRateNV -> ("combinerOps" ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)) -> IO ()) vkCmdSetFragmentShadingRateEnumNV) 
src/Vulkan/Extensions.hs view
@@ -199,6 +199,7 @@                           , module Vulkan.Extensions.VK_NV_fill_rectangle                           , module Vulkan.Extensions.VK_NV_fragment_coverage_to_color                           , module Vulkan.Extensions.VK_NV_fragment_shader_barycentric+                          , module Vulkan.Extensions.VK_NV_fragment_shading_rate_enums                           , module Vulkan.Extensions.VK_NV_framebuffer_mixed_samples                           , module Vulkan.Extensions.VK_NV_geometry_shader_passthrough                           , module Vulkan.Extensions.VK_NV_glsl_shader@@ -419,6 +420,7 @@ import Vulkan.Extensions.VK_NV_fill_rectangle import Vulkan.Extensions.VK_NV_fragment_coverage_to_color import Vulkan.Extensions.VK_NV_fragment_shader_barycentric+import Vulkan.Extensions.VK_NV_fragment_shading_rate_enums import Vulkan.Extensions.VK_NV_framebuffer_mixed_samples import Vulkan.Extensions.VK_NV_geometry_shader_passthrough import Vulkan.Extensions.VK_NV_glsl_shader
src/Vulkan/Extensions/VK_AMD_buffer_marker.hs view
@@ -70,81 +70,91 @@ -- -- == Valid Usage ----- -   @pipelineStage@ /must/ be a+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04074# @pipelineStage@+--     /must/ be a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-supported valid stage> --     for the queue family that was used to create the command pool that --     @commandBuffer@ was allocated from ----- -   If the+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04075# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometry shaders> --     feature is not enabled, @pipelineStage@ /must/ not be --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_GEOMETRY_SHADER_BIT' ----- -   If the+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04076# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders> --     feature is not enabled, @pipelineStage@ /must/ not be --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT' --     or --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' ----- -   If the+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04077# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-conditionalRendering conditional rendering> --     feature is not enabled, @pipelineStage@ /must/ not be --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT' ----- -   If the+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04078# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentDensityMap fragment density map> --     feature is not enabled, @pipelineStage@ /must/ not be --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT' ----- -   If the+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04079# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-transformFeedback transform feedback> --     feature is not enabled, @pipelineStage@ /must/ not be --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT' ----- -   If the+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04080# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader mesh shaders> --     feature is not enabled, @pipelineStage@ /must/ not be --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_MESH_SHADER_BIT_NV' --     or --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TASK_SHADER_BIT_NV' ----- -   If the+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-04081# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image> --     feature is not enabled, @pipelineStage@ /must/ not be --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV' ----- -   @dstOffset@ /must/ be less than or equal to the size of @dstBuffer@---     minus @4@+-- -   #VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01798# @dstOffset@ /must/+--     be less than or equal to the size of @dstBuffer@ minus @4@ ----- -   @dstBuffer@ /must/ have been created with+-- -   #VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01799# @dstBuffer@ /must/+--     have been created with --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT' --     usage flag ----- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-01800# If @dstBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @dstOffset@ /must/ be a multiple of @4@+-- -   #VUID-vkCmdWriteBufferMarkerAMD-dstOffset-01801# @dstOffset@ /must/+--     be a multiple of @4@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pipelineStage@ /must/ be a valid+-- -   #VUID-vkCmdWriteBufferMarkerAMD-pipelineStage-parameter#+--     @pipelineStage@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits' --     value ----- -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkCmdWriteBufferMarkerAMD-dstBuffer-parameter# @dstBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdWriteBufferMarkerAMD-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support transfer, graphics, or compute --     operations ----- -   Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,+-- -   #VUID-vkCmdWriteBufferMarkerAMD-commonparent# Both of+--     @commandBuffer@, and @dstBuffer@ /must/ have been created, --     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization
src/Vulkan/Extensions/VK_AMD_device_coherent_memory.hs view
@@ -43,7 +43,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceCoherentMemoryFeaturesAMD = PhysicalDeviceCoherentMemoryFeaturesAMD-  { -- | @deviceCoherentMemory@ indicates that the implementation supports+  { -- | #features-deviceCoherentMemory# @deviceCoherentMemory@ indicates that+    -- the implementation supports     -- <VkMemoryPropertyFlagBits.html device coherent memory>.     deviceCoherentMemory :: Bool }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_AMD_display_native_hdr.hs view
@@ -62,18 +62,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkSetLocalDimmingAMD-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @swapChain@ /must/ be a valid---     'Vulkan.Extensions.Handles.SwapchainKHR' handle+-- -   #VUID-vkSetLocalDimmingAMD-swapChain-parameter# @swapChain@ /must/+--     be a valid 'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   Both of @device@, and @swapChain@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkSetLocalDimmingAMD-commonparent# Both of @device@, and+--     @swapChain@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Instance' -- -- == Valid Usage ----- -   It is only valid to call 'setLocalDimmingAMD' if+-- -   #VUID-vkSetLocalDimmingAMD-XXXXX# It is only valid to call+--     'setLocalDimmingAMD' if --     'DisplayNativeHdrSurfaceCapabilitiesAMD'::@localDimmingSupport@ is --     supported --@@ -168,12 +170,14 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSwapchainDisplayNativeHdrCreateInfoAMD-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD' -- -- == Valid Usage ----- -   It is only valid to set @localDimmingEnable@ to+-- -   #VUID-VkSwapchainDisplayNativeHdrCreateInfoAMD-localDimmingEnable-04449#+--     It is only valid to set @localDimmingEnable@ to --     'Vulkan.Core10.FundamentalTypes.TRUE' if --     'DisplayNativeHdrSurfaceCapabilitiesAMD'::@localDimmingSupport@ is --     supported
src/Vulkan/Extensions/VK_AMD_memory_overallocation_behavior.hs view
@@ -55,6 +55,7 @@ data DeviceMemoryOverallocationCreateInfoAMD = DeviceMemoryOverallocationCreateInfoAMD   { -- | @overallocationBehavior@ is the desired overallocation behavior.     --+    -- #VUID-VkDeviceMemoryOverallocationCreateInfoAMD-overallocationBehavior-parameter#     -- @overallocationBehavior@ /must/ be a valid     -- 'MemoryOverallocationBehaviorAMD' value     overallocationBehavior :: MemoryOverallocationBehaviorAMD }
src/Vulkan/Extensions/VK_AMD_pipeline_compiler_control.hs view
@@ -55,6 +55,7 @@     -- 'PipelineCompilerControlFlagBitsAMD' affecting how the pipeline will be     -- compiled.     --+    -- #VUID-VkPipelineCompilerControlCreateInfoAMD-compilerControlFlags-zerobitmask#     -- @compilerControlFlags@ /must/ be @0@     compilerControlFlags :: PipelineCompilerControlFlagsAMD }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_AMD_rasterization_order.hs view
@@ -61,6 +61,7 @@   { -- | @rasterizationOrder@ is a 'RasterizationOrderAMD' value specifying the     -- primitive rasterization order to use.     --+    -- #VUID-VkPipelineRasterizationStateRasterizationOrderAMD-rasterizationOrder-parameter#     -- @rasterizationOrder@ /must/ be a valid 'RasterizationOrderAMD' value     rasterizationOrder :: RasterizationOrderAMD }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_AMD_shader_core_properties.hs view
@@ -47,54 +47,60 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderCorePropertiesAMD = PhysicalDeviceShaderCorePropertiesAMD-  { -- | @shaderEngineCount@ is an unsigned integer value indicating the number-    -- of shader engines found inside the shader core of the physical device.+  { -- | #limits-shaderEngineCount# @shaderEngineCount@ is an unsigned integer+    -- value indicating the number of shader engines found inside the shader+    -- core of the physical device.     shaderEngineCount :: Word32-  , -- | @shaderArraysPerEngineCount@ is an unsigned integer value indicating the-    -- number of shader arrays inside a shader engine. Each shader array has-    -- its own scan converter, set of compute units, and a render back end-    -- (color and depth buffers). Shader arrays within a shader engine share-    -- shader processor input (wave launcher) and shader export (export buffer)-    -- units. Currently, a shader engine can have one or two shader arrays.+  , -- | #limits-shaderArraysPerEngineCount# @shaderArraysPerEngineCount@ is an+    -- unsigned integer value indicating the number of shader arrays inside a+    -- shader engine. Each shader array has its own scan converter, set of+    -- compute units, and a render back end (color and depth buffers). Shader+    -- arrays within a shader engine share shader processor input (wave+    -- launcher) and shader export (export buffer) units. Currently, a shader+    -- engine can have one or two shader arrays.     shaderArraysPerEngineCount :: Word32-  , -- | @computeUnitsPerShaderArray@ is an unsigned integer value indicating the-    -- physical number of compute units within a shader array. The active-    -- number of compute units in a shader array /may/ be lower. A compute unit-    -- houses a set of SIMDs along with a sequencer module and a local data-    -- store.+  , -- | #limits-computeUnitsPerShaderArray# @computeUnitsPerShaderArray@ is an+    -- unsigned integer value indicating the physical number of compute units+    -- within a shader array. The active number of compute units in a shader+    -- array /may/ be lower. A compute unit houses a set of SIMDs along with a+    -- sequencer module and a local data store.     computeUnitsPerShaderArray :: Word32-  , -- | @simdPerComputeUnit@ is an unsigned integer value indicating the number-    -- of SIMDs inside a compute unit. Each SIMD processes a single instruction-    -- at a time.+  , -- | #limits-simdPerComputeUnit# @simdPerComputeUnit@ is an unsigned integer+    -- value indicating the number of SIMDs inside a compute unit. Each SIMD+    -- processes a single instruction at a time.     simdPerComputeUnit :: Word32   , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "wavefrontsPerSimd"     wavefrontsPerSimd :: Word32-  , -- | @wavefrontSize@ is an unsigned integer value indicating the maximum size-    -- of a subgroup.+  , -- | #limits-wavefrontSize# @wavefrontSize@ is an unsigned integer value+    -- indicating the maximum size of a subgroup.     wavefrontSize :: Word32-  , -- | @sgprsPerSimd@ is an unsigned integer value indicating the number of-    -- physical Scalar General Purpose Registers (SGPRs) per SIMD.+  , -- | #limits-sgprsPerSimd# @sgprsPerSimd@ is an unsigned integer value+    -- indicating the number of physical Scalar General Purpose Registers+    -- (SGPRs) per SIMD.     sgprsPerSimd :: Word32-  , -- | @minSgprAllocation@ is an unsigned integer value indicating the minimum-    -- number of SGPRs allocated for a wave.+  , -- | #limits-minSgprAllocation# @minSgprAllocation@ is an unsigned integer+    -- value indicating the minimum number of SGPRs allocated for a wave.     minSgprAllocation :: Word32-  , -- | @maxSgprAllocation@ is an unsigned integer value indicating the maximum-    -- number of SGPRs allocated for a wave.+  , -- | #limits-maxSgprAllocation# @maxSgprAllocation@ is an unsigned integer+    -- value indicating the maximum number of SGPRs allocated for a wave.     maxSgprAllocation :: Word32-  , -- | @sgprAllocationGranularity@ is an unsigned integer value indicating the-    -- granularity of SGPR allocation for a wave.+  , -- | #limits-sgprAllocationGranularity# @sgprAllocationGranularity@ is an+    -- unsigned integer value indicating the granularity of SGPR allocation for+    -- a wave.     sgprAllocationGranularity :: Word32-  , -- | @vgprsPerSimd@ is an unsigned integer value indicating the number of-    -- physical Vector General Purpose Registers (VGPRs) per SIMD.+  , -- | #limits-vgprsPerSimd# @vgprsPerSimd@ is an unsigned integer value+    -- indicating the number of physical Vector General Purpose Registers+    -- (VGPRs) per SIMD.     vgprsPerSimd :: Word32-  , -- | @minVgprAllocation@ is an unsigned integer value indicating the minimum-    -- number of VGPRs allocated for a wave.+  , -- | #limits-minVgprAllocation# @minVgprAllocation@ is an unsigned integer+    -- value indicating the minimum number of VGPRs allocated for a wave.     minVgprAllocation :: Word32-  , -- | @maxVgprAllocation@ is an unsigned integer value indicating the maximum-    -- number of VGPRs allocated for a wave.+  , -- | #limits-maxVgprAllocation# @maxVgprAllocation@ is an unsigned integer+    -- value indicating the maximum number of VGPRs allocated for a wave.     maxVgprAllocation :: Word32-  , -- | @vgprAllocationGranularity@ is an unsigned integer value indicating the-    -- granularity of VGPR allocation for a wave.+  , -- | #limits-vgprAllocationGranularity# @vgprAllocationGranularity@ is an+    -- unsigned integer value indicating the granularity of VGPR allocation for+    -- a wave.     vgprAllocationGranularity :: Word32   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_AMD_shader_core_properties2.hs view
@@ -64,11 +64,13 @@ -- 'ShaderCorePropertiesFlagsAMD', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderCoreProperties2AMD = PhysicalDeviceShaderCoreProperties2AMD-  { -- | @shaderCoreFeatures@ is a bitmask of 'ShaderCorePropertiesFlagBitsAMD'-    -- indicating the set of features supported by the shader core.+  { -- | #features-shaderCoreFeatures# @shaderCoreFeatures@ is a bitmask of+    -- 'ShaderCorePropertiesFlagBitsAMD' indicating the set of features+    -- supported by the shader core.     shaderCoreFeatures :: ShaderCorePropertiesFlagsAMD-  , -- | @activeComputeUnitCount@ is an unsigned integer value indicating the-    -- number of compute units that have been enabled.+  , -- | #limits-activeComputeUnitCount# @activeComputeUnitCount@ is an unsigned+    -- integer value indicating the number of compute units that have been+    -- enabled.     activeComputeUnitCount :: Word32   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_AMD_shader_info.hs view
@@ -133,23 +133,28 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetShaderInfoAMD-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+-- -   #VUID-vkGetShaderInfoAMD-pipeline-parameter# @pipeline@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Pipeline' handle ----- -   @shaderStage@ /must/ be a valid+-- -   #VUID-vkGetShaderInfoAMD-shaderStage-parameter# @shaderStage@ /must/+--     be a valid --     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' value ----- -   @infoType@ /must/ be a valid 'ShaderInfoTypeAMD' value+-- -   #VUID-vkGetShaderInfoAMD-infoType-parameter# @infoType@ /must/ be a+--     valid 'ShaderInfoTypeAMD' value ----- -   @pInfoSize@ /must/ be a valid pointer to a @size_t@ value+-- -   #VUID-vkGetShaderInfoAMD-pInfoSize-parameter# @pInfoSize@ /must/ be+--     a valid pointer to a @size_t@ value ----- -   If the value referenced by @pInfoSize@ is not @0@, and @pInfo@ is---     not @NULL@, @pInfo@ /must/ be a valid pointer to an array of---     @pInfoSize@ bytes+-- -   #VUID-vkGetShaderInfoAMD-pInfo-parameter# If the value referenced by+--     @pInfoSize@ is not @0@, and @pInfo@ is not @NULL@, @pInfo@ /must/ be+--     a valid pointer to an array of @pInfoSize@ bytes ----- -   @pipeline@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkGetShaderInfoAMD-pipeline-parent# @pipeline@ /must/ have+--     been created, allocated, or retrieved from @device@ -- -- == Return Codes --
src/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs view
@@ -114,14 +114,17 @@                                            . (Extendss AndroidHardwareBufferPropertiesANDROID a, PokeChain a, PeekChain a, MonadIO io)                                           => -- | @device@ is the logical device that will be importing @buffer@.                                              --+                                             -- #VUID-vkGetAndroidHardwareBufferPropertiesANDROID-device-parameter#                                              -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                              Device                                           -> -- | @buffer@ is the Android hardware buffer which will be imported.                                              ---                                             -- @buffer@ /must/ be a valid Android hardware buffer object with at least-                                             -- one of the @AHARDWAREBUFFER_USAGE_GPU_@* flags in its+                                             -- #VUID-vkGetAndroidHardwareBufferPropertiesANDROID-buffer-01884# @buffer@+                                             -- /must/ be a valid Android hardware buffer object with at least one of+                                             -- the @AHARDWAREBUFFER_USAGE_GPU_@* flags in its                                              -- @AHardwareBuffer_Desc@::@usage@                                              --+                                             -- #VUID-vkGetAndroidHardwareBufferPropertiesANDROID-buffer-parameter#                                              -- @buffer@ /must/ be a valid pointer to a valid 'AHardwareBuffer' value                                              (Ptr AHardwareBuffer)                                           -> io (AndroidHardwareBufferPropertiesANDROID a)@@ -182,12 +185,14 @@                                       => -- | @device@ is the logical device that created the device memory being                                          -- exported.                                          ---                                         -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                         -- #VUID-vkGetMemoryAndroidHardwareBufferANDROID-device-parameter# @device@+                                         -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                          Device                                       -> -- | @pInfo@ is a pointer to a 'MemoryGetAndroidHardwareBufferInfoANDROID'                                          -- structure containing parameters of the export operation.                                          ---                                         -- @pInfo@ /must/ be a valid pointer to a valid+                                         -- #VUID-vkGetMemoryAndroidHardwareBufferANDROID-pInfo-parameter# @pInfo@+                                         -- /must/ be a valid pointer to a valid                                          -- 'MemoryGetAndroidHardwareBufferInfoANDROID' structure                                          MemoryGetAndroidHardwareBufferInfoANDROID                                       -> io (Ptr AHardwareBuffer)@@ -216,23 +221,27 @@ -- -- == Valid Usage ----- -   If @buffer@ is not @NULL@, Android hardware buffers /must/ be---     supported for import, as reported by+-- -   #VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01880# If+--     @buffer@ is not @NULL@, Android hardware buffers /must/ be supported+--     for import, as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties' --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties' ----- -   If @buffer@ is not @NULL@, it /must/ be a valid Android hardware---     buffer object with @AHardwareBuffer_Desc@::@usage@ compatible with---     Vulkan as described in+-- -   #VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-01881# If+--     @buffer@ is not @NULL@, it /must/ be a valid Android hardware buffer+--     object with @AHardwareBuffer_Desc@::@usage@ compatible with Vulkan+--     as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-external-android-hardware-buffer Android Hardware Buffers> -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImportAndroidHardwareBufferInfoANDROID-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID' ----- -   @buffer@ /must/ be a valid pointer to an 'AHardwareBuffer' value+-- -   #VUID-VkImportAndroidHardwareBufferInfoANDROID-buffer-parameter#+--     @buffer@ /must/ be a valid pointer to an 'AHardwareBuffer' value -- -- = See Also --@@ -357,14 +366,16 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkAndroidHardwareBufferPropertiesANDROID-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkAndroidHardwareBufferPropertiesANDROID-pNext-pNext# @pNext@+--     /must/ be @NULL@ or a pointer to a valid instance of --     'AndroidHardwareBufferFormatPropertiesANDROID' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkAndroidHardwareBufferPropertiesANDROID-sType-unique# The+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique -- -- = See Also --@@ -435,26 +446,30 @@ -- -- == Valid Usage ----- -   'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'+-- -   #VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-handleTypes-01882#+--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID' --     /must/ have been included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     when @memory@ was created ----- -   If the @pNext@ chain of the---     'Vulkan.Core10.Memory.MemoryAllocateInfo' used to allocate @memory@---     included a+-- -   #VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-01883# If+--     the @pNext@ chain of the 'Vulkan.Core10.Memory.MemoryAllocateInfo'+--     used to allocate @memory@ included a --     'Vulkan.Core11.Promoted_From_VK_KHR_dedicated_allocation.MemoryDedicatedAllocateInfo' --     with non-@NULL@ @image@ member, then that @image@ /must/ already be --     bound to @memory@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-pNext-pNext#+--     @pNext@ /must/ be @NULL@ ----- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'+-- -   #VUID-VkMemoryGetAndroidHardwareBufferInfoANDROID-memory-parameter#+--     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' --     handle -- -- = See Also@@ -708,8 +723,8 @@   { -- | @externalFormat@ is an implementation-defined identifier for the     -- external format     ---    -- @externalFormat@ /must/ be @0@ or a value returned in the-    -- @externalFormat@ member of+    -- #VUID-VkExternalFormatANDROID-externalFormat-01894# @externalFormat@+    -- /must/ be @0@ or a value returned in the @externalFormat@ member of     -- 'AndroidHardwareBufferFormatPropertiesANDROID' by an earlier call to     -- 'getAndroidHardwareBufferPropertiesANDROID'     externalFormat :: Word64 }
src/Vulkan/Extensions/VK_EXT_4444_formats.hs view
@@ -43,8 +43,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevice4444FormatsFeaturesEXT = PhysicalDevice4444FormatsFeaturesEXT-  { -- | @formatA4R4G4B4@ indicates that the implementation /must/ support using-    -- a 'Vulkan.Core10.Enums.Format.Format' of+  { -- | #features-formatA4R4G4B4# @formatA4R4G4B4@ indicates that the+    -- implementation /must/ support using a+    -- 'Vulkan.Core10.Enums.Format.Format' of     -- 'Vulkan.Core10.Enums.Format.FORMAT_A4R4G4B4_UNORM_PACK16_EXT' with at     -- least the following     -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits':@@ -55,8 +56,9 @@     --     -- -   'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'     formatA4R4G4B4 :: Bool-  , -- | @formatA4B4G4R4@ indicates that the implementation /must/ support using-    -- a 'Vulkan.Core10.Enums.Format.Format' of+  , -- | #features-formatA4B4G4R4# @formatA4B4G4R4@ indicates that the+    -- implementation /must/ support using a+    -- 'Vulkan.Core10.Enums.Format.Format' of     -- 'Vulkan.Core10.Enums.Format.FORMAT_A4B4G4R4_UNORM_PACK16_EXT' with at     -- least the following     -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FormatFeatureFlagBits':
src/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs view
@@ -92,21 +92,21 @@                        . (MonadIO io)                       => -- | @physicalDevice@ The physical device the display is on.                          ---                         -- @physicalDevice@ /must/ be a valid-                         -- 'Vulkan.Core10.Handles.PhysicalDevice' handle+                         -- #VUID-vkAcquireXlibDisplayEXT-physicalDevice-parameter# @physicalDevice@+                         -- /must/ be a valid 'Vulkan.Core10.Handles.PhysicalDevice' handle                          PhysicalDevice                       -> -- | @dpy@ A connection to the X11 server that currently owns @display@.                          ---                         -- @dpy@ /must/ be a valid pointer to a-                         -- 'Vulkan.Extensions.VK_KHR_xlib_surface.Display' value+                         -- #VUID-vkAcquireXlibDisplayEXT-dpy-parameter# @dpy@ /must/ be a valid+                         -- pointer to a 'Vulkan.Extensions.VK_KHR_xlib_surface.Display' value                          ("dpy" ::: Ptr Display)                       -> -- | @display@ The display the caller wishes to control in Vulkan.                          ---                         -- @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'-                         -- handle+                         -- #VUID-vkAcquireXlibDisplayEXT-display-parameter# @display@ /must/ be a+                         -- valid 'Vulkan.Extensions.Handles.DisplayKHR' handle                          ---                         -- @display@ /must/ have been created, allocated, or retrieved from-                         -- @physicalDevice@+                         -- #VUID-vkAcquireXlibDisplayEXT-display-parent# @display@ /must/ have been+                         -- created, allocated, or retrieved from @physicalDevice@                          DisplayKHR                       -> io () acquireXlibDisplayEXT physicalDevice dpy display = liftIO $ do@@ -152,13 +152,14 @@                           . (MonadIO io)                          => -- | @physicalDevice@ The physical device to query the display handle on.                             --+                            -- #VUID-vkGetRandROutputDisplayEXT-physicalDevice-parameter#                             -- @physicalDevice@ /must/ be a valid                             -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                             PhysicalDevice                          -> -- | @dpy@ A connection to the X11 server from which @rrOutput@ was queried.                             ---                            -- @dpy@ /must/ be a valid pointer to a-                            -- 'Vulkan.Extensions.VK_KHR_xlib_surface.Display' value+                            -- #VUID-vkGetRandROutputDisplayEXT-dpy-parameter# @dpy@ /must/ be a valid+                            -- pointer to a 'Vulkan.Extensions.VK_KHR_xlib_surface.Display' value                             ("dpy" ::: Ptr Display)                          -> -- | @rrOutput@ An X11 RandR output ID.                             RROutput
src/Vulkan/Extensions/VK_EXT_astc_decode_mode.hs view
@@ -36,31 +36,34 @@ -- -- == Valid Usage ----- -   @decodeMode@ /must/ be one of+-- -   #VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02230# @decodeMode@+--     /must/ be one of --     'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16A16_SFLOAT', --     'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM', or --     'Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32' ----- -   If the+-- -   #VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02231# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-astc-decodeModeSharedExponent decodeModeSharedExponent> --     feature is not enabled, @decodeMode@ /must/ not be --     'Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32' ----- -   If @decodeMode@ is---     'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM' the image view+-- -   #VUID-VkImageViewASTCDecodeModeEXT-decodeMode-02232# If @decodeMode@+--     is 'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM' the image view --     /must/ not include blocks using any of the ASTC HDR modes ----- -   @format@ of the image view /must/ be one of the+-- -   #VUID-VkImageViewASTCDecodeModeEXT-format-04084# @format@ of the+--     image view /must/ be one of the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#appendix-compressedtex-astc ASTC Compressed Image Formats> -- -- If @format@ uses sRGB encoding then the @decodeMode@ has no effect. -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageViewASTCDecodeModeEXT-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT' ----- -   @decodeMode@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'+-- -   #VUID-VkImageViewASTCDecodeModeEXT-decodeMode-parameter#+--     @decodeMode@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' --     value -- -- = See Also@@ -133,10 +136,10 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceASTCDecodeFeaturesEXT = PhysicalDeviceASTCDecodeFeaturesEXT-  { -- | @decodeModeSharedExponent@ indicates whether the implementation supports-    -- decoding ASTC compressed formats to-    -- 'Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32' internal-    -- precision.+  { -- | #features-astc-decodeModeSharedExponent# @decodeModeSharedExponent@+    -- indicates whether the implementation supports decoding ASTC compressed+    -- formats to 'Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32'+    -- internal precision.     decodeModeSharedExponent :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs view
@@ -76,7 +76,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceBlendOperationAdvancedFeaturesEXT = PhysicalDeviceBlendOperationAdvancedFeaturesEXT-  { -- | @advancedBlendCoherentOperations@ specifies whether blending using+  { -- | #features-advancedBlendCoherentOperations#+    -- @advancedBlendCoherentOperations@ specifies whether blending using     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operations>     -- is guaranteed to execute atomically and in     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-order primitive order>.@@ -150,34 +151,38 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceBlendOperationAdvancedPropertiesEXT = PhysicalDeviceBlendOperationAdvancedPropertiesEXT-  { -- | @advancedBlendMaxColorAttachments@ is one greater than the highest color+  { -- | #limits-advancedBlendMaxColorAttachments#+    -- @advancedBlendMaxColorAttachments@ is one greater than the highest color     -- attachment index that /can/ be used in a subpass, for a pipeline that     -- uses an     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blend-advanced advanced blend operation>.     advancedBlendMaxColorAttachments :: Word32-  , -- | @advancedBlendIndependentBlend@ specifies whether advanced blend-    -- operations /can/ vary per-attachment.+  , -- | #limits-advancedBlendIndependentBlend# @advancedBlendIndependentBlend@+    -- specifies whether advanced blend operations /can/ vary per-attachment.     advancedBlendIndependentBlend :: Bool-  , -- | @advancedBlendNonPremultipliedSrcColor@ specifies whether the source+  , -- | #limits-advancedBlendNonPremultipliedSrcColor#+    -- @advancedBlendNonPremultipliedSrcColor@ specifies whether the source     -- color /can/ be treated as non-premultiplied. If this is     -- 'Vulkan.Core10.FundamentalTypes.FALSE', then     -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@srcPremultiplied@     -- /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'.     advancedBlendNonPremultipliedSrcColor :: Bool-  , -- | @advancedBlendNonPremultipliedDstColor@ specifies whether the+  , -- | #limits-advancedBlendNonPremultipliedDstColor#+    -- @advancedBlendNonPremultipliedDstColor@ specifies whether the     -- destination color /can/ be treated as non-premultiplied. If this is     -- 'Vulkan.Core10.FundamentalTypes.FALSE', then     -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@dstPremultiplied@     -- /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'.     advancedBlendNonPremultipliedDstColor :: Bool-  , -- | @advancedBlendCorrelatedOverlap@ specifies whether the overlap mode-    -- /can/ be treated as correlated. If this is-    -- 'Vulkan.Core10.FundamentalTypes.FALSE', then+  , -- | #limits-advancedBlendCorrelatedOverlap# @advancedBlendCorrelatedOverlap@+    -- specifies whether the overlap mode /can/ be treated as correlated. If+    -- this is 'Vulkan.Core10.FundamentalTypes.FALSE', then     -- 'PipelineColorBlendAdvancedStateCreateInfoEXT'::@blendOverlap@ /must/ be     -- 'BLEND_OVERLAP_UNCORRELATED_EXT'.     advancedBlendCorrelatedOverlap :: Bool-  , -- | @advancedBlendAllOperations@ specifies whether all advanced blend-    -- operation enums are supported. See the valid usage of+  , -- | #limits-advancedBlendAllOperations# @advancedBlendAllOperations@+    -- specifies whether all advanced blend operation enums are supported. See+    -- the valid usage of     -- 'Vulkan.Core10.Pipeline.PipelineColorBlendAttachmentState'.     advancedBlendAllOperations :: Bool   }@@ -251,27 +256,32 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-srcPremultiplied-01424#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendNonPremultipliedSrcColor non-premultiplied source color> --     property is not supported, @srcPremultiplied@ /must/ be --     'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If the+-- -   #VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-dstPremultiplied-01425#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendNonPremultipliedDstColor non-premultiplied destination color> --     property is not supported, @dstPremultiplied@ /must/ be --     'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If the+-- -   #VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-01426#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendCorrelatedOverlap correlated overlap> --     property is not supported, @blendOverlap@ /must/ be --     'BLEND_OVERLAP_UNCORRELATED_EXT' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT' ----- -   @blendOverlap@ /must/ be a valid 'BlendOverlapEXT' value+-- -   #VUID-VkPipelineColorBlendAdvancedStateCreateInfoEXT-blendOverlap-parameter#+--     @blendOverlap@ /must/ be a valid 'BlendOverlapEXT' value -- -- = See Also --
src/Vulkan/Extensions/VK_EXT_buffer_device_address.hs view
@@ -108,15 +108,17 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceBufferDeviceAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT-  { -- | @bufferDeviceAddress@ indicates that the implementation supports-    -- accessing buffer memory in shaders as storage buffers via an address-    -- queried from 'getBufferDeviceAddressEXT'.+  { -- | #features-bufferDeviceAddressEXT# @bufferDeviceAddress@ indicates that+    -- the implementation supports accessing buffer memory in shaders as+    -- storage buffers via an address queried from 'getBufferDeviceAddressEXT'.     bufferDeviceAddress :: Bool-  , -- | @bufferDeviceAddressCaptureReplay@ indicates that the implementation+  , -- | #features-bufferDeviceAddressCaptureReplayEXT#+    -- @bufferDeviceAddressCaptureReplay@ indicates that the implementation     -- supports saving and reusing buffer addresses, e.g. for trace capture and     -- replay.     bufferDeviceAddressCaptureReplay :: Bool-  , -- | @bufferDeviceAddressMultiDevice@ indicates that the implementation+  , -- | #features-bufferDeviceAddressMultiDeviceEXT#+    -- @bufferDeviceAddressMultiDevice@ indicates that the implementation     -- supports the @bufferDeviceAddress@ feature for logical devices created     -- with multiple physical devices. If this feature is not supported, buffer     -- addresses /must/ not be queried on a logical device created with more
src/Vulkan/Extensions/VK_EXT_calibrated_timestamps.hs view
@@ -109,12 +109,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsEXT-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pTimeDomainCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsEXT-pTimeDomainCount-parameter#+--     @pTimeDomainCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pTimeDomainCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceCalibrateableTimeDomainsEXT-pTimeDomains-parameter#+--     If the value referenced by @pTimeDomainCount@ is not @0@, and --     @pTimeDomains@ is not @NULL@, @pTimeDomains@ /must/ be a valid --     pointer to an array of @pTimeDomainCount@ 'TimeDomainEXT' values --@@ -206,12 +209,14 @@                             . (MonadIO io)                            => -- | @device@ is the logical device used to perform the query.                               ---                              -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                              -- #VUID-vkGetCalibratedTimestampsEXT-device-parameter# @device@ /must/ be+                              -- a valid 'Vulkan.Core10.Handles.Device' handle                               Device                            -> -- | @pTimestampInfos@ is a pointer to an array of @timestampCount@                               -- 'CalibratedTimestampInfoEXT' structures, describing the time domains the                               -- calibrated timestamps should be captured from.                               --+                              -- #VUID-vkGetCalibratedTimestampsEXT-pTimestampInfos-parameter#                               -- @pTimestampInfos@ /must/ be a valid pointer to an array of                               -- @timestampCount@ valid 'CalibratedTimestampInfoEXT' structures                               ("timestampInfos" ::: Vector CalibratedTimestampInfoEXT)@@ -245,10 +250,12 @@   { -- | @timeDomain@ is a 'TimeDomainEXT' value specifying the time domain from     -- which the calibrated timestamp value should be returned.     ---    -- @timeDomain@ /must/ be one of the 'TimeDomainEXT' values returned by+    -- #VUID-VkCalibratedTimestampInfoEXT-timeDomain-02354# @timeDomain@ /must/+    -- be one of the 'TimeDomainEXT' values returned by     -- 'getPhysicalDeviceCalibrateableTimeDomainsEXT'     ---    -- @timeDomain@ /must/ be a valid 'TimeDomainEXT' value+    -- #VUID-VkCalibratedTimestampInfoEXT-timeDomain-parameter# @timeDomain@+    -- /must/ be a valid 'TimeDomainEXT' value     timeDomain :: TimeDomainEXT }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_EXT_conditional_rendering.hs view
@@ -83,21 +83,26 @@ -- -- == Valid Usage ----- -   Conditional rendering /must/ not already be+-- -   #VUID-vkCmdBeginConditionalRenderingEXT-None-01980# Conditional+--     rendering /must/ not already be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active> -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pConditionalRenderingBegin@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdBeginConditionalRenderingEXT-pConditionalRenderingBegin-parameter#+--     @pConditionalRenderingBegin@ /must/ be a valid pointer to a valid --     'ConditionalRenderingBeginInfoEXT' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBeginConditionalRenderingEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations -- -- == Host Synchronization@@ -167,27 +172,33 @@ -- -- == Valid Usage ----- -   Conditional rendering /must/ be+-- -   #VUID-vkCmdEndConditionalRenderingEXT-None-01985# Conditional+--     rendering /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active> ----- -   If conditional rendering was made+-- -   #VUID-vkCmdEndConditionalRenderingEXT-None-01986# If conditional+--     rendering was made --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active> --     outside of a render pass instance, it /must/ not be ended inside a --     render pass instance ----- -   If conditional rendering was made+-- -   #VUID-vkCmdEndConditionalRenderingEXT-None-01987# If conditional+--     rendering was made --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#active-conditional-rendering active> --     within a subpass it /must/ be ended in the same subpass -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdEndConditionalRenderingEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations -- -- == Host Synchronization@@ -241,29 +252,36 @@ -- -- == Valid Usage ----- -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkConditionalRenderingBeginInfoEXT-buffer-01981# If @buffer@+--     is non-sparse then it /must/ be bound completely and contiguously to+--     a single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @buffer@ /must/ have been created with the+-- -   #VUID-VkConditionalRenderingBeginInfoEXT-buffer-01982# @buffer@+--     /must/ have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT' --     bit set ----- -   @offset@ /must/ be less than the size of @buffer@ by at least 32---     bits+-- -   #VUID-VkConditionalRenderingBeginInfoEXT-offset-01983# @offset@+--     /must/ be less than the size of @buffer@ by at least 32 bits ----- -   @offset@ /must/ be a multiple of 4+-- -   #VUID-VkConditionalRenderingBeginInfoEXT-offset-01984# @offset@+--     /must/ be a multiple of 4 -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkConditionalRenderingBeginInfoEXT-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkConditionalRenderingBeginInfoEXT-pNext-pNext# @pNext@ /must/+--     be @NULL@ ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkConditionalRenderingBeginInfoEXT-buffer-parameter# @buffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @flags@ /must/ be a valid combination of---     'ConditionalRenderingFlagBitsEXT' values+-- -   #VUID-VkConditionalRenderingBeginInfoEXT-flags-parameter# @flags@+--     /must/ be a valid combination of 'ConditionalRenderingFlagBitsEXT'+--     values -- -- = See Also --@@ -336,14 +354,16 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkCommandBufferInheritanceConditionalRenderingInfoEXT-conditionalRenderingEnable-01977#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-inheritedConditionalRendering inherited conditional rendering> --     feature is not enabled, @conditionalRenderingEnable@ /must/ be --     'Vulkan.Core10.FundamentalTypes.FALSE' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkCommandBufferInheritanceConditionalRenderingInfoEXT-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT' -- -- = See Also@@ -418,12 +438,12 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceConditionalRenderingFeaturesEXT = PhysicalDeviceConditionalRenderingFeaturesEXT-  { -- | @conditionalRendering@ specifies whether conditional rendering is-    -- supported.+  { -- | #features-conditionalRendering# @conditionalRendering@ specifies whether+    -- conditional rendering is supported.     conditionalRendering :: Bool-  , -- | @inheritedConditionalRendering@ specifies whether a secondary command-    -- buffer /can/ be executed while conditional rendering is active in the-    -- primary command buffer.+  , -- | #features-inheritedConditionalRendering# @inheritedConditionalRendering@+    -- specifies whether a secondary command buffer /can/ be executed while+    -- conditional rendering is active in the primary command buffer.     inheritedConditionalRendering :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs view
@@ -78,16 +78,17 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceConservativeRasterizationPropertiesEXT = PhysicalDeviceConservativeRasterizationPropertiesEXT-  { -- | @primitiveOverestimationSize@ is the size in pixels the generating-    -- primitive is increased at each of its edges during conservative-    -- rasterization overestimation mode. Even with a size of 0.0, conservative-    -- rasterization overestimation rules still apply and if any part of the-    -- pixel rectangle is covered by the generating primitive, fragments are-    -- generated for the entire pixel. However implementations /may/ make the-    -- pixel coverage area even more conservative by increasing the size of the-    -- generating primitive.+  { -- | #limits-primitiveOverestimationSize# @primitiveOverestimationSize@ is+    -- the size in pixels the generating primitive is increased at each of its+    -- edges during conservative rasterization overestimation mode. Even with a+    -- size of 0.0, conservative rasterization overestimation rules still apply+    -- and if any part of the pixel rectangle is covered by the generating+    -- primitive, fragments are generated for the entire pixel. However+    -- implementations /may/ make the pixel coverage area even more+    -- conservative by increasing the size of the generating primitive.     primitiveOverestimationSize :: Float-  , -- | @maxExtraPrimitiveOverestimationSize@ is the maximum size in pixels of+  , -- | #limits-maxExtraPrimitiveOverestimationSize#+    -- @maxExtraPrimitiveOverestimationSize@ is the maximum size in pixels of     -- extra overestimation the implementation supports in the pipeline state.     -- A value of 0.0 means the implementation does not support any additional     -- overestimation of the generating primitive during conservative@@ -95,47 +96,53 @@     -- increase the size of the generating primitive during conservative     -- rasterization overestimation.     maxExtraPrimitiveOverestimationSize :: Float-  , -- | @extraPrimitiveOverestimationSizeGranularity@ is the granularity of+  , -- | #limits-extraPrimitiveOverestimationSizeGranularity#+    -- @extraPrimitiveOverestimationSizeGranularity@ is the granularity of     -- extra overestimation that can be specified in the pipeline state between     -- 0.0 and @maxExtraPrimitiveOverestimationSize@ inclusive. A value of 0.0     -- means the implementation can use the smallest representable non-zero     -- value in the screen space pixel fixed-point grid.     extraPrimitiveOverestimationSizeGranularity :: Float-  , -- | @primitiveUnderestimation@ is true if the implementation supports the+  , -- | #limits-primitiveUnderestimation# @primitiveUnderestimation@ is true if+    -- the implementation supports the     -- 'CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT' conservative     -- rasterization mode in addition to     -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'. Otherwise the     -- implementation only supports     -- 'CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT'.     primitiveUnderestimation :: Bool-  , -- | @conservativePointAndLineRasterization@ is true if the implementation+  , -- | #limits-conservativePointAndLineRasterization#+    -- @conservativePointAndLineRasterization@ is true if the implementation     -- supports conservative rasterization of point and line primitives as well     -- as triangle primitives. Otherwise the implementation only supports     -- triangle primitives.     conservativePointAndLineRasterization :: Bool-  , -- | @degenerateTrianglesRasterized@ is false if the implementation culls-    -- primitives generated from triangles that become zero area after they are-    -- quantized to the fixed-point rasterization pixel grid.-    -- @degenerateTrianglesRasterized@ is true if these primitives are not-    -- culled and the provoking vertex attributes and depth value are used for-    -- the fragments. The primitive area calculation is done on the primitive-    -- generated from the clipped triangle if applicable. Zero area primitives-    -- are backfacing and the application /can/ enable backface culling if-    -- desired.+  , -- | #limits-degenerateTrianglesRasterized# @degenerateTrianglesRasterized@+    -- is false if the implementation culls primitives generated from triangles+    -- that become zero area after they are quantized to the fixed-point+    -- rasterization pixel grid. @degenerateTrianglesRasterized@ is true if+    -- these primitives are not culled and the provoking vertex attributes and+    -- depth value are used for the fragments. The primitive area calculation+    -- is done on the primitive generated from the clipped triangle if+    -- applicable. Zero area primitives are backfacing and the application+    -- /can/ enable backface culling if desired.     degenerateTrianglesRasterized :: Bool-  , -- | @degenerateLinesRasterized@ is false if the implementation culls lines-    -- that become zero length after they are quantized to the fixed-point-    -- rasterization pixel grid. @degenerateLinesRasterized@ is true if zero-    -- length lines are not culled and the provoking vertex attributes and-    -- depth value are used for the fragments.+  , -- | #limits-degenerateLinesRasterized# @degenerateLinesRasterized@ is false+    -- if the implementation culls lines that become zero length after they are+    -- quantized to the fixed-point rasterization pixel grid.+    -- @degenerateLinesRasterized@ is true if zero length lines are not culled+    -- and the provoking vertex attributes and depth value are used for the+    -- fragments.     degenerateLinesRasterized :: Bool-  , -- | @fullyCoveredFragmentShaderInputVariable@ is true if the implementation+  , -- | #limits-fullyCoveredFragmentShaderInputVariable#+    -- @fullyCoveredFragmentShaderInputVariable@ is true if the implementation     -- supports the SPIR-V builtin fragment shader input variable     -- @FullyCoveredEXT@ which specifies that conservative rasterization is     -- enabled and the fragment area is fully covered by the generating     -- primitive.     fullyCoveredFragmentShaderInputVariable :: Bool-  , -- | @conservativeRasterizationPostDepthCoverage@ is true if the+  , -- | #limits-conservativeRasterizationPostDepthCoverage#+    -- @conservativeRasterizationPostDepthCoverage@ is true if the     -- implementation supports conservative rasterization with the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage PostDepthCoverage>     -- execution mode enabled. When supported the@@ -231,11 +238,13 @@ data PipelineRasterizationConservativeStateCreateInfoEXT = PipelineRasterizationConservativeStateCreateInfoEXT   { -- | @flags@ is reserved for future use.     --+    -- #VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-flags-zerobitmask#     -- @flags@ /must/ be @0@     flags :: PipelineRasterizationConservativeStateCreateFlagsEXT   , -- | @conservativeRasterizationMode@ is the conservative rasterization mode     -- to use.     --+    -- #VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-conservativeRasterizationMode-parameter#     -- @conservativeRasterizationMode@ /must/ be a valid     -- 'ConservativeRasterizationModeEXT' value     conservativeRasterizationMode :: ConservativeRasterizationModeEXT@@ -245,6 +254,7 @@     -- overestimation specified in     -- 'PhysicalDeviceConservativeRasterizationPropertiesEXT'::@primitiveOverestimationSize@.     --+    -- #VUID-VkPipelineRasterizationConservativeStateCreateInfoEXT-extraPrimitiveOverestimationSize-01769#     -- @extraPrimitiveOverestimationSize@ /must/ be in the range of @0.0@ to     -- 'PhysicalDeviceConservativeRasterizationPropertiesEXT'::@maxExtraPrimitiveOverestimationSize@     -- inclusive
src/Vulkan/Extensions/VK_EXT_custom_border_color.hs view
@@ -43,7 +43,8 @@ -- -- == Valid Usage ----- -   If provided @format@ is not+-- -   #VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04013# If+--     provided @format@ is not --     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' then the --     'Vulkan.Core10.Sampler.SamplerCreateInfo'::@borderColor@ type /must/ --     match the sampled type of the provided @format@, as shown in the@@ -51,12 +52,13 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-numericformat> --     table ----- -   If the+-- -   #VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04014# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-customBorderColorWithoutFormat customBorderColorWithoutFormat> --     feature is not enabled then @format@ /must/ not be --     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED' ----- -   If the sampler is used to sample an image view of+-- -   #VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-04015# If the+--     sampler is used to sample an image view of --     'Vulkan.Core10.Enums.Format.FORMAT_B4G4R4A4_UNORM_PACK16', --     'Vulkan.Core10.Enums.Format.FORMAT_B5G6R5_UNORM_PACK16', or --     'Vulkan.Core10.Enums.Format.FORMAT_B5G5R5A1_UNORM_PACK16' format@@ -65,10 +67,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSamplerCustomBorderColorCreateInfoEXT-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT' ----- -   @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value+-- -   #VUID-VkSamplerCustomBorderColorCreateInfoEXT-format-parameter#+--     @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value -- -- = See Also --@@ -130,8 +134,9 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceCustomBorderColorPropertiesEXT = PhysicalDeviceCustomBorderColorPropertiesEXT-  { -- | @maxCustomBorderColorSamplers@ indicates the maximum number of samplers-    -- with custom border colors which /can/ simultaneously exist on a device.+  { -- | #limits-maxCustomBorderColorSamplers# @maxCustomBorderColorSamplers@+    -- indicates the maximum number of samplers with custom border colors which+    -- /can/ simultaneously exist on a device.     maxCustomBorderColorSamplers :: Word32 }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -186,15 +191,16 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceCustomBorderColorFeaturesEXT = PhysicalDeviceCustomBorderColorFeaturesEXT-  { -- | @customBorderColors@ indicates that the implementation supports-    -- providing a @borderColor@ value with one of the following values at-    -- sampler creation time:+  { -- | #features-customBorderColors# @customBorderColors@ indicates that the+    -- implementation supports providing a @borderColor@ value with one of the+    -- following values at sampler creation time:     --     -- -   'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_FLOAT_CUSTOM_EXT'     --     -- -   'Vulkan.Core10.Enums.BorderColor.BORDER_COLOR_INT_CUSTOM_EXT'     customBorderColors :: Bool-  , -- | @customBorderColorWithoutFormat@ indicates that explicit formats are not+  , -- | #features-customBorderColorWithoutFormat#+    -- @customBorderColorWithoutFormat@ indicates that explicit formats are not     -- required for custom border colors and the value of the @format@ member     -- of the 'SamplerCustomBorderColorCreateInfoEXT' structure /may/ be     -- 'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'. If this feature bit is
src/Vulkan/Extensions/VK_EXT_debug_marker.hs view
@@ -87,10 +87,12 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDebugMarkerSetObjectNameEXT-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pNameInfo@ /must/ be a valid pointer to a valid---     'DebugMarkerObjectNameInfoEXT' structure+-- -   #VUID-vkDebugMarkerSetObjectNameEXT-pNameInfo-parameter# @pNameInfo@+--     /must/ be a valid pointer to a valid 'DebugMarkerObjectNameInfoEXT'+--     structure -- -- == Host Synchronization --@@ -140,10 +142,12 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDebugMarkerSetObjectTagEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pTagInfo@ /must/ be a valid pointer to a valid---     'DebugMarkerObjectTagInfoEXT' structure+-- -   #VUID-vkDebugMarkerSetObjectTagEXT-pTagInfo-parameter# @pTagInfo@+--     /must/ be a valid pointer to a valid 'DebugMarkerObjectTagInfoEXT'+--     structure -- -- == Host Synchronization --@@ -193,16 +197,20 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pMarkerInfo@ /must/ be a valid pointer to a valid---     'DebugMarkerMarkerInfoEXT' structure+-- -   #VUID-vkCmdDebugMarkerBeginEXT-pMarkerInfo-parameter# @pMarkerInfo@+--     /must/ be a valid pointer to a valid 'DebugMarkerMarkerInfoEXT'+--     structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDebugMarkerBeginEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations -- -- == Host Synchronization@@ -265,24 +273,28 @@ -- -- == Valid Usage ----- -   There /must/ be an outstanding 'cmdDebugMarkerBeginEXT' command---     prior to the 'cmdDebugMarkerEndEXT' on the queue that---     @commandBuffer@ is submitted to+-- -   #VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01239# There /must/ be an+--     outstanding 'cmdDebugMarkerBeginEXT' command prior to the+--     'cmdDebugMarkerEndEXT' on the queue that @commandBuffer@ is+--     submitted to ----- -   If @commandBuffer@ is a secondary command buffer, there /must/ be an---     outstanding 'cmdDebugMarkerBeginEXT' command recorded to---     @commandBuffer@ that has not previously been ended by a call to---     'cmdDebugMarkerEndEXT'+-- -   #VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01240# If @commandBuffer@+--     is a secondary command buffer, there /must/ be an outstanding+--     'cmdDebugMarkerBeginEXT' command recorded to @commandBuffer@ that+--     has not previously been ended by a call to 'cmdDebugMarkerEndEXT' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdDebugMarkerEndEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDebugMarkerEndEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDebugMarkerEndEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations -- -- == Host Synchronization@@ -332,16 +344,20 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pMarkerInfo@ /must/ be a valid pointer to a valid---     'DebugMarkerMarkerInfoEXT' structure+-- -   #VUID-vkCmdDebugMarkerInsertEXT-pMarkerInfo-parameter# @pMarkerInfo@+--     /must/ be a valid pointer to a valid 'DebugMarkerMarkerInfoEXT'+--     structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDebugMarkerInsertEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations -- -- == Host Synchronization@@ -405,23 +421,27 @@     -- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT'     -- specifying the type of the object to be named.     ---    -- @objectType@ /must/ not be+    -- #VUID-VkDebugMarkerObjectNameInfoEXT-objectType-01490# @objectType@+    -- /must/ not be     -- 'Vulkan.Extensions.VK_EXT_debug_report.DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT'     ---    -- @objectType@ /must/ be a valid+    -- #VUID-VkDebugMarkerObjectNameInfoEXT-objectType-parameter# @objectType@+    -- /must/ be a valid     -- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT' value     objectType :: DebugReportObjectTypeEXT   , -- | @object@ is the object to be named.     ---    -- @object@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+    -- #VUID-VkDebugMarkerObjectNameInfoEXT-object-01491# @object@ /must/ not+    -- be 'Vulkan.Core10.APIConstants.NULL_HANDLE'     ---    -- @object@ /must/ be a Vulkan object of the type associated with-    -- @objectType@ as defined in+    -- #VUID-VkDebugMarkerObjectNameInfoEXT-object-01492# @object@ /must/ be a+    -- Vulkan object of the type associated with @objectType@ as defined in     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>     object :: Word64   , -- | @pObjectName@ is a null-terminated UTF-8 string specifying the name to     -- apply to @object@.     --+    -- #VUID-VkDebugMarkerObjectNameInfoEXT-pObjectName-parameter#     -- @pObjectName@ /must/ be a null-terminated UTF-8 string     objectName :: ByteString   }@@ -488,30 +508,35 @@     -- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT'     -- specifying the type of the object to be named.     ---    -- @objectType@ /must/ not be+    -- #VUID-VkDebugMarkerObjectTagInfoEXT-objectType-01493# @objectType@+    -- /must/ not be     -- 'Vulkan.Extensions.VK_EXT_debug_report.DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT'     ---    -- @objectType@ /must/ be a valid+    -- #VUID-VkDebugMarkerObjectTagInfoEXT-objectType-parameter# @objectType@+    -- /must/ be a valid     -- 'Vulkan.Extensions.VK_EXT_debug_report.DebugReportObjectTypeEXT' value     objectType :: DebugReportObjectTypeEXT   , -- | @object@ is the object to be tagged.     ---    -- @object@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+    -- #VUID-VkDebugMarkerObjectTagInfoEXT-object-01494# @object@ /must/ not be+    -- 'Vulkan.Core10.APIConstants.NULL_HANDLE'     ---    -- @object@ /must/ be a Vulkan object of the type associated with-    -- @objectType@ as defined in+    -- #VUID-VkDebugMarkerObjectTagInfoEXT-object-01495# @object@ /must/ be a+    -- Vulkan object of the type associated with @objectType@ as defined in     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types>     object :: Word64   , -- | @tagName@ is a numerical identifier of the tag.     tagName :: Word64   , -- | @tagSize@ is the number of bytes of data to attach to the object.     ---    -- @tagSize@ /must/ be greater than @0@+    -- #VUID-VkDebugMarkerObjectTagInfoEXT-tagSize-arraylength# @tagSize@+    -- /must/ be greater than @0@     tagSize :: Word64   , -- | @pTag@ is a pointer to an array of @tagSize@ bytes containing the data     -- to be associated with the object.     ---    -- @pTag@ /must/ be a valid pointer to an array of @tagSize@ bytes+    -- #VUID-VkDebugMarkerObjectTagInfoEXT-pTag-parameter# @pTag@ /must/ be a+    -- valid pointer to an array of @tagSize@ bytes     tag :: Ptr ()   }   deriving (Typeable)@@ -581,7 +606,8 @@   { -- | @pMarkerName@ is a pointer to a null-terminated UTF-8 string containing     -- the name of the marker.     ---    -- @pMarkerName@ /must/ be a null-terminated UTF-8 string+    -- #VUID-VkDebugMarkerMarkerInfoEXT-pMarkerName-parameter# @pMarkerName@+    -- /must/ be a null-terminated UTF-8 string     markerName :: ByteString   , -- | @color@ is an /optional/ RGBA color value that can be associated with     -- the marker. A particular implementation /may/ choose to ignore this
src/Vulkan/Extensions/VK_EXT_debug_report.hs view
@@ -146,16 +146,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateDebugReportCallbackEXT-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateDebugReportCallbackEXT-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'DebugReportCallbackCreateInfoEXT' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateDebugReportCallbackEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pCallback@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateDebugReportCallbackEXT-pCallback-parameter#+--     @pCallback@ /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.DebugReportCallbackEXT' handle -- -- == Return Codes@@ -227,27 +231,33 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDebugReportCallbackEXT-instance-01242# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @callback@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDebugReportCallbackEXT-instance-01243# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @callback@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkDestroyDebugReportCallbackEXT-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   If @callback@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkDestroyDebugReportCallbackEXT-callback-parameter# If+--     @callback@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @callback@ /must/ be a valid --     'Vulkan.Extensions.Handles.DebugReportCallbackEXT' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroyDebugReportCallbackEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @callback@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @instance@+-- -   #VUID-vkDestroyDebugReportCallbackEXT-callback-parent# If @callback@+--     is a valid handle, it /must/ have been created, allocated, or+--     retrieved from @instance@ -- -- == Host Synchronization --@@ -303,29 +313,35 @@ -- -- == Valid Usage ----- -   @object@ /must/ be a Vulkan object or---     'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- -   #VUID-vkDebugReportMessageEXT-object-01241# @object@ /must/ be a+--     Vulkan object or 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @objectType@ is not 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT' and---     @object@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @object@---     /must/ be a Vulkan object of the corresponding type associated with---     @objectType@ as defined in+-- -   #VUID-vkDebugReportMessageEXT-objectType-01498# If @objectType@ is+--     not 'DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT' and @object@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @object@ /must/ be a+--     Vulkan object of the corresponding type associated with @objectType@+--     as defined in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debug-report-object-types> -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkDebugReportMessageEXT-instance-parameter# @instance@ /must/+--     be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @flags@ /must/ be a valid combination of 'DebugReportFlagBitsEXT'---     values+-- -   #VUID-vkDebugReportMessageEXT-flags-parameter# @flags@ /must/ be a+--     valid combination of 'DebugReportFlagBitsEXT' values ----- -   @flags@ /must/ not be @0@+-- -   #VUID-vkDebugReportMessageEXT-flags-requiredbitmask# @flags@ /must/+--     not be @0@ ----- -   @objectType@ /must/ be a valid 'DebugReportObjectTypeEXT' value+-- -   #VUID-vkDebugReportMessageEXT-objectType-parameter# @objectType@+--     /must/ be a valid 'DebugReportObjectTypeEXT' value ----- -   @pLayerPrefix@ /must/ be a null-terminated UTF-8 string+-- -   #VUID-vkDebugReportMessageEXT-pLayerPrefix-parameter# @pLayerPrefix@+--     /must/ be a null-terminated UTF-8 string ----- -   @pMessage@ /must/ be a null-terminated UTF-8 string+-- -   #VUID-vkDebugReportMessageEXT-pMessage-parameter# @pMessage@ /must/+--     be a null-terminated UTF-8 string -- -- = See Also --@@ -413,10 +429,12 @@   { -- | @flags@ is a bitmask of 'DebugReportFlagBitsEXT' specifying which     -- event(s) will cause this callback to be called.     ---    -- @flags@ /must/ be a valid combination of 'DebugReportFlagBitsEXT' values+    -- #VUID-VkDebugReportCallbackCreateInfoEXT-flags-parameter# @flags@ /must/+    -- be a valid combination of 'DebugReportFlagBitsEXT' values     flags :: DebugReportFlagsEXT   , -- | @pfnCallback@ is the application callback function to call.     --+    -- #VUID-VkDebugReportCallbackCreateInfoEXT-pfnCallback-parameter#     -- @pfnCallback@ /must/ be a valid 'PFN_vkDebugReportCallbackEXT' value     pfnCallback :: PFN_vkDebugReportCallbackEXT   , -- | @pUserData@ is user data to be passed to the callback.
src/Vulkan/Extensions/VK_EXT_debug_utils.hs view
@@ -157,18 +157,22 @@ -- -- == Valid Usage ----- -   @pNameInfo->objectType@ /must/ not be+-- -   #VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02587#+--     @pNameInfo->objectType@ /must/ not be --     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN' ----- -   @pNameInfo->objectHandle@ /must/ not be+-- -   #VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02588#+--     @pNameInfo->objectHandle@ /must/ not be --     'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkSetDebugUtilsObjectNameEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pNameInfo@ /must/ be a valid pointer to a valid---     'DebugUtilsObjectNameInfoEXT' structure+-- -   #VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-parameter# @pNameInfo@+--     /must/ be a valid pointer to a valid 'DebugUtilsObjectNameInfoEXT'+--     structure -- -- == Host Synchronization --@@ -219,10 +223,12 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkSetDebugUtilsObjectTagEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pTagInfo@ /must/ be a valid pointer to a valid---     'DebugUtilsObjectTagInfoEXT' structure+-- -   #VUID-vkSetDebugUtilsObjectTagEXT-pTagInfo-parameter# @pTagInfo@+--     /must/ be a valid pointer to a valid 'DebugUtilsObjectTagInfoEXT'+--     structure -- -- == Host Synchronization --@@ -288,13 +294,14 @@                               . (MonadIO io)                              => -- | @queue@ is the queue in which to start a debug label region.                                 ---                                -- @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+                                -- #VUID-vkQueueBeginDebugUtilsLabelEXT-queue-parameter# @queue@ /must/ be+                                -- a valid 'Vulkan.Core10.Handles.Queue' handle                                 Queue                              -> -- | @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure specifying                                 -- parameters of the label region to open.                                 ---                                -- @pLabelInfo@ /must/ be a valid pointer to a valid 'DebugUtilsLabelEXT'-                                -- structure+                                -- #VUID-vkQueueBeginDebugUtilsLabelEXT-pLabelInfo-parameter# @pLabelInfo@+                                -- /must/ be a valid pointer to a valid 'DebugUtilsLabelEXT' structure                                 ("labelInfo" ::: DebugUtilsLabelEXT)                              -> io () queueBeginDebugUtilsLabelEXT queue labelInfo = liftIO . evalContT $ do@@ -323,12 +330,14 @@ -- -- == Valid Usage ----- -   There /must/ be an outstanding 'queueBeginDebugUtilsLabelEXT'---     command prior to the 'queueEndDebugUtilsLabelEXT' on the queue+-- -   #VUID-vkQueueEndDebugUtilsLabelEXT-None-01911# There /must/ be an+--     outstanding 'queueBeginDebugUtilsLabelEXT' command prior to the+--     'queueEndDebugUtilsLabelEXT' on the queue -- -- == Valid Usage (Implicit) ----- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+-- -   #VUID-vkQueueEndDebugUtilsLabelEXT-queue-parameter# @queue@ /must/+--     be a valid 'Vulkan.Core10.Handles.Queue' handle -- -- == Command Properties --@@ -383,13 +392,14 @@                                . (MonadIO io)                               => -- | @queue@ is the queue into which a debug label will be inserted.                                  ---                                 -- @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+                                 -- #VUID-vkQueueInsertDebugUtilsLabelEXT-queue-parameter# @queue@ /must/ be+                                 -- a valid 'Vulkan.Core10.Handles.Queue' handle                                  Queue                               -> -- | @pLabelInfo@ is a pointer to a 'DebugUtilsLabelEXT' structure specifying                                  -- parameters of the label to insert.                                  ---                                 -- @pLabelInfo@ /must/ be a valid pointer to a valid 'DebugUtilsLabelEXT'-                                 -- structure+                                 -- #VUID-vkQueueInsertDebugUtilsLabelEXT-pLabelInfo-parameter# @pLabelInfo@+                                 -- /must/ be a valid pointer to a valid 'DebugUtilsLabelEXT' structure                                  ("labelInfo" ::: DebugUtilsLabelEXT)                               -> io () queueInsertDebugUtilsLabelEXT queue labelInfo = liftIO . evalContT $ do@@ -413,16 +423,20 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pLabelInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdBeginDebugUtilsLabelEXT-pLabelInfo-parameter#+--     @pLabelInfo@ /must/ be a valid pointer to a valid --     'DebugUtilsLabelEXT' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBeginDebugUtilsLabelEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations -- -- == Host Synchronization@@ -494,24 +508,29 @@ -- -- == Valid Usage ----- -   There /must/ be an outstanding 'cmdBeginDebugUtilsLabelEXT' command---     prior to the 'cmdEndDebugUtilsLabelEXT' on the queue that---     @commandBuffer@ is submitted to+-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01912# There /must/+--     be an outstanding 'cmdBeginDebugUtilsLabelEXT' command prior to the+--     'cmdEndDebugUtilsLabelEXT' on the queue that @commandBuffer@ is+--     submitted to ----- -   If @commandBuffer@ is a secondary command buffer, there /must/ be an+-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01913# If+--     @commandBuffer@ is a secondary command buffer, there /must/ be an --     outstanding 'cmdBeginDebugUtilsLabelEXT' command recorded to --     @commandBuffer@ that has not previously been ended by a call to --     'cmdEndDebugUtilsLabelEXT' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations -- -- == Host Synchronization@@ -561,16 +580,20 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pLabelInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdInsertDebugUtilsLabelEXT-pLabelInfo-parameter#+--     @pLabelInfo@ /must/ be a valid pointer to a valid --     'DebugUtilsLabelEXT' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdInsertDebugUtilsLabelEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations -- -- == Host Synchronization@@ -623,16 +646,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateDebugUtilsMessengerEXT-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateDebugUtilsMessengerEXT-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'DebugUtilsMessengerCreateInfoEXT' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateDebugUtilsMessengerEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pMessenger@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateDebugUtilsMessengerEXT-pMessenger-parameter#+--     @pMessenger@ /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle -- -- == Return Codes@@ -708,26 +735,32 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01915# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @messenger@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-messenger-01916# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @messenger@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   If @messenger@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parameter# If+--     @messenger@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @messenger@ /must/ be a valid --     'Vulkan.Extensions.Handles.DebugUtilsMessengerEXT' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @messenger@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkDestroyDebugUtilsMessengerEXT-messenger-parent# If+--     @messenger@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @instance@ -- -- == Host Synchronization@@ -788,22 +821,28 @@ -- -- == Valid Usage ----- -   The @objectType@ member of each element of @pCallbackData->pObjects@+-- -   #VUID-vkSubmitDebugUtilsMessageEXT-objectType-02591# The+--     @objectType@ member of each element of @pCallbackData->pObjects@ --     /must/ not be 'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN' -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkSubmitDebugUtilsMessageEXT-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @messageSeverity@ /must/ be a valid+-- -   #VUID-vkSubmitDebugUtilsMessageEXT-messageSeverity-parameter#+--     @messageSeverity@ /must/ be a valid --     'DebugUtilsMessageSeverityFlagBitsEXT' value ----- -   @messageTypes@ /must/ be a valid combination of+-- -   #VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-parameter#+--     @messageTypes@ /must/ be a valid combination of --     'DebugUtilsMessageTypeFlagBitsEXT' values ----- -   @messageTypes@ /must/ not be @0@+-- -   #VUID-vkSubmitDebugUtilsMessageEXT-messageTypes-requiredbitmask#+--     @messageTypes@ /must/ not be @0@ ----- -   @pCallbackData@ /must/ be a valid pointer to a valid+-- -   #VUID-vkSubmitDebugUtilsMessageEXT-pCallbackData-parameter#+--     @pCallbackData@ /must/ be a valid pointer to a valid --     'DebugUtilsMessengerCallbackDataEXT' structure -- -- = See Also@@ -846,11 +885,13 @@ -- -- == Valid Usage ----- -   If @objectType@ is+-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02589# If+--     @objectType@ is --     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN', @objectHandle@ --     /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @objectType@ is not+-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02590# If+--     @objectType@ is not --     'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN', @objectHandle@ --     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' or a valid Vulkan --     handle of the type associated with @objectType@ as defined in the@@ -859,15 +900,18 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @objectType@ /must/ be a valid+-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-objectType-parameter#+--     @objectType@ /must/ be a valid --     'Vulkan.Core10.Enums.ObjectType.ObjectType' value ----- -   If @pObjectName@ is not @NULL@, @pObjectName@ /must/ be a+-- -   #VUID-VkDebugUtilsObjectNameInfoEXT-pObjectName-parameter# If+--     @pObjectName@ is not @NULL@, @pObjectName@ /must/ be a --     null-terminated UTF-8 string -- -- = See Also@@ -949,16 +993,17 @@   { -- | @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType' specifying     -- the type of the object to be named.     ---    -- @objectType@ /must/ not be-    -- 'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'+    -- #VUID-VkDebugUtilsObjectTagInfoEXT-objectType-01908# @objectType@ /must/+    -- not be 'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_UNKNOWN'     ---    -- @objectType@ /must/ be a valid-    -- 'Vulkan.Core10.Enums.ObjectType.ObjectType' value+    -- #VUID-VkDebugUtilsObjectTagInfoEXT-objectType-parameter# @objectType@+    -- /must/ be a valid 'Vulkan.Core10.Enums.ObjectType.ObjectType' value     objectType :: ObjectType   , -- | @objectHandle@ is the object to be tagged.     ---    -- @objectHandle@ /must/ be a valid Vulkan handle of the type associated-    -- with @objectType@ as defined in the+    -- #VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01910# @objectHandle@+    -- /must/ be a valid Vulkan handle of the type associated with @objectType@+    -- as defined in the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#debugging-object-types  and Vulkan Handle Relationship>     -- table     objectHandle :: Word64@@ -966,12 +1011,14 @@     tagName :: Word64   , -- | @tagSize@ is the number of bytes of data to attach to the object.     ---    -- @tagSize@ /must/ be greater than @0@+    -- #VUID-VkDebugUtilsObjectTagInfoEXT-tagSize-arraylength# @tagSize@ /must/+    -- be greater than @0@     tagSize :: Word64   , -- | @pTag@ is a pointer to an array of @tagSize@ bytes containing the data     -- to be associated with the object.     ---    -- @pTag@ /must/ be a valid pointer to an array of @tagSize@ bytes+    -- #VUID-VkDebugUtilsObjectTagInfoEXT-pTag-parameter# @pTag@ /must/ be a+    -- valid pointer to an array of @tagSize@ bytes     tag :: Ptr ()   }   deriving (Typeable)@@ -1042,7 +1089,8 @@   { -- | @pLabelName@ is a pointer to a null-terminated UTF-8 string containing     -- the name of the label.     ---    -- @pLabelName@ /must/ be a null-terminated UTF-8 string+    -- #VUID-VkDebugUtilsLabelEXT-pLabelName-parameter# @pLabelName@ /must/ be+    -- a null-terminated UTF-8 string     labelName :: ByteString   , -- | @color@ is an optional RGBA color value that can be associated with the     -- label. A particular implementation /may/ choose to ignore this color@@ -1149,30 +1197,37 @@ data DebugUtilsMessengerCreateInfoEXT = DebugUtilsMessengerCreateInfoEXT   { -- | @flags@ is @0@ and is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-flags-zerobitmask# @flags@+    -- /must/ be @0@     flags :: DebugUtilsMessengerCreateFlagsEXT   , -- | @messageSeverity@ is a bitmask of 'DebugUtilsMessageSeverityFlagBitsEXT'     -- specifying which severity of event(s) will cause this callback to be     -- called.     --+    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-parameter#     -- @messageSeverity@ /must/ be a valid combination of     -- 'DebugUtilsMessageSeverityFlagBitsEXT' values     --+    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-messageSeverity-requiredbitmask#     -- @messageSeverity@ /must/ not be @0@     messageSeverity :: DebugUtilsMessageSeverityFlagsEXT   , -- | @messageType@ is a bitmask of 'DebugUtilsMessageTypeFlagBitsEXT'     -- specifying which type of event(s) will cause this callback to be called.     --+    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-parameter#     -- @messageType@ /must/ be a valid combination of     -- 'DebugUtilsMessageTypeFlagBitsEXT' values     --+    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-messageType-requiredbitmask#     -- @messageType@ /must/ not be @0@     messageType :: DebugUtilsMessageTypeFlagsEXT   , -- | @pfnUserCallback@ is the application callback function to call.     --+    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-01914#     -- @pfnUserCallback@ /must/ be a valid     -- 'PFN_vkDebugUtilsMessengerCallbackEXT'     --+    -- #VUID-VkDebugUtilsMessengerCreateInfoEXT-pfnUserCallback-parameter#     -- @pfnUserCallback@ /must/ be a valid     -- 'PFN_vkDebugUtilsMessengerCallbackEXT' value     pfnUserCallback :: PFN_vkDebugUtilsMessengerCallbackEXT@@ -1268,28 +1323,36 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pNext-pNext# @pNext@+--     /must/ be @NULL@ ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-flags-zerobitmask#+--     @flags@ /must/ be @0@ ----- -   If @pMessageIdName@ is not @NULL@, @pMessageIdName@ /must/ be a+-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessageIdName-parameter#+--     If @pMessageIdName@ is not @NULL@, @pMessageIdName@ /must/ be a --     null-terminated UTF-8 string ----- -   @pMessage@ /must/ be a null-terminated UTF-8 string+-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pMessage-parameter#+--     @pMessage@ /must/ be a null-terminated UTF-8 string ----- -   If @queueLabelCount@ is not @0@, @pQueueLabels@ /must/ be a valid+-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pQueueLabels-parameter#+--     If @queueLabelCount@ is not @0@, @pQueueLabels@ /must/ be a valid --     pointer to an array of @queueLabelCount@ valid 'DebugUtilsLabelEXT' --     structures ----- -   If @cmdBufLabelCount@ is not @0@, @pCmdBufLabels@ /must/ be a valid+-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pCmdBufLabels-parameter#+--     If @cmdBufLabelCount@ is not @0@, @pCmdBufLabels@ /must/ be a valid --     pointer to an array of @cmdBufLabelCount@ valid 'DebugUtilsLabelEXT' --     structures ----- -   If @objectCount@ is not @0@, @pObjects@ /must/ be a valid pointer to---     an array of @objectCount@ valid 'DebugUtilsObjectNameInfoEXT'+-- -   #VUID-VkDebugUtilsMessengerCallbackDataEXT-pObjects-parameter# If+--     @objectCount@ is not @0@, @pObjects@ /must/ be a valid pointer to an+--     array of @objectCount@ valid 'DebugUtilsObjectNameInfoEXT' --     structures -- -- = See Also
src/Vulkan/Extensions/VK_EXT_depth_clip_enable.hs view
@@ -70,10 +70,10 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDepthClipEnableFeaturesEXT = PhysicalDeviceDepthClipEnableFeaturesEXT-  { -- | @depthClipEnable@ indicates that the implementation supports setting the-    -- depth clipping operation explicitly via the-    -- 'PipelineRasterizationDepthClipStateCreateInfoEXT' pipeline state.-    -- Otherwise depth clipping is only enabled when+  { -- | #features-depthClipEnable# @depthClipEnable@ indicates that the+    -- implementation supports setting the depth clipping operation explicitly+    -- via the 'PipelineRasterizationDepthClipStateCreateInfoEXT' pipeline+    -- state. Otherwise depth clipping is only enabled when     -- 'Vulkan.Core10.Pipeline.PipelineRasterizationStateCreateInfo'::@depthClampEnable@     -- is set to 'Vulkan.Core10.FundamentalTypes.FALSE'.     depthClipEnable :: Bool }@@ -128,6 +128,7 @@ data PipelineRasterizationDepthClipStateCreateInfoEXT = PipelineRasterizationDepthClipStateCreateInfoEXT   { -- | @flags@ is reserved for future use.     --+    -- #VUID-VkPipelineRasterizationDepthClipStateCreateInfoEXT-flags-zerobitmask#     -- @flags@ /must/ be @0@     flags :: PipelineRasterizationDepthClipStateCreateFlagsEXT   , -- | @depthClipEnable@ controls whether depth clipping is enabled as
src/Vulkan/Extensions/VK_EXT_device_memory_report.hs view
@@ -90,8 +90,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDeviceMemoryReportFeaturesEXT = PhysicalDeviceDeviceMemoryReportFeaturesEXT-  { -- | @deviceMemoryReport@ indicates whether the implementation supports the-    -- ability to register device memory report callbacks.+  { -- | #features-deviceMemoryReport# @deviceMemoryReport@ indicates whether the+    -- implementation supports the ability to register device memory report+    -- callbacks.     deviceMemoryReport :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -155,15 +156,18 @@ data DeviceDeviceMemoryReportCreateInfoEXT = DeviceDeviceMemoryReportCreateInfoEXT   { -- | @flags@ is 0 and reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkDeviceDeviceMemoryReportCreateInfoEXT-flags-zerobitmask# @flags@+    -- /must/ be @0@     flags :: DeviceMemoryReportFlagsEXT   , -- | @pfnUserCallback@ is the application callback function to call.     --+    -- #VUID-VkDeviceDeviceMemoryReportCreateInfoEXT-pfnUserCallback-parameter#     -- @pfnUserCallback@ /must/ be a valid     -- 'PFN_vkDeviceMemoryReportCallbackEXT' value     pfnUserCallback :: PFN_vkDeviceMemoryReportCallbackEXT   , -- | @pUserData@ is user data to be passed to the callback.     --+    -- #VUID-VkDeviceDeviceMemoryReportCreateInfoEXT-pUserData-parameter#     -- @pUserData@ /must/ be a pointer value     userData :: Ptr ()   }
src/Vulkan/Extensions/VK_EXT_direct_mode_display.hs view
@@ -49,16 +49,16 @@                    . (MonadIO io)                   => -- | @physicalDevice@ The physical device the display is on.                      ---                     -- @physicalDevice@ /must/ be a valid-                     -- 'Vulkan.Core10.Handles.PhysicalDevice' handle+                     -- #VUID-vkReleaseDisplayEXT-physicalDevice-parameter# @physicalDevice@+                     -- /must/ be a valid 'Vulkan.Core10.Handles.PhysicalDevice' handle                      PhysicalDevice                   -> -- | @display@ The display to release control of.                      ---                     -- @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'-                     -- handle+                     -- #VUID-vkReleaseDisplayEXT-display-parameter# @display@ /must/ be a valid+                     -- 'Vulkan.Extensions.Handles.DisplayKHR' handle                      ---                     -- @display@ /must/ have been created, allocated, or retrieved from-                     -- @physicalDevice@+                     -- #VUID-vkReleaseDisplayEXT-display-parent# @display@ /must/ have been+                     -- created, allocated, or retrieved from @physicalDevice@                      DisplayKHR                   -> io () releaseDisplayEXT physicalDevice display = liftIO $ do
src/Vulkan/Extensions/VK_EXT_directfb_surface.hs view
@@ -93,16 +93,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateDirectFBSurfaceEXT-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateDirectFBSurfaceEXT-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'DirectFBSurfaceCreateInfoEXT' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateDirectFBSurfaceEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSurface@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateDirectFBSurfaceEXT-pSurface-parameter# @pSurface@+--     /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes@@ -174,11 +178,13 @@                                                  . (MonadIO io)                                                 => -- | @physicalDevice@ is the physical device.                                                    --+                                                   -- #VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-physicalDevice-parameter#                                                    -- @physicalDevice@ /must/ be a valid                                                    -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                                    PhysicalDevice                                                 -> -- | @queueFamilyIndex@ is the queue family index.                                                    --+                                                   -- #VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-queueFamilyIndex-04119#                                                    -- @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@                                                    -- returned by                                                    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'@@ -186,6 +192,7 @@                                                    ("queueFamilyIndex" ::: Word32)                                                 -> -- | @dfb@ is a pointer to the 'IDirectFB' main interface of DirectFB.                                                    --+                                                   -- #VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-dfb-parameter#                                                    -- @dfb@ /must/ be a valid pointer to an 'IDirectFB' value                                                    ("dfb" ::: Ptr IDirectFB)                                                 -> io (Bool)@@ -211,15 +218,18 @@ data DirectFBSurfaceCreateInfoEXT = DirectFBSurfaceCreateInfoEXT   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkDirectFBSurfaceCreateInfoEXT-flags-zerobitmask# @flags@ /must/+    -- be @0@     flags :: DirectFBSurfaceCreateFlagsEXT   , -- | @dfb@ is a pointer to the 'IDirectFB' main interface of DirectFB.     ---    -- @dfb@ /must/ point to a valid DirectFB 'IDirectFB'+    -- #VUID-VkDirectFBSurfaceCreateInfoEXT-dfb-04117# @dfb@ /must/ point to a+    -- valid DirectFB 'IDirectFB'     dfb :: Ptr IDirectFB   , -- | @surface@ is a pointer to a 'IDirectFBSurface' surface interface.     ---    -- @surface@ /must/ point to a valid DirectFB 'IDirectFBSurface'+    -- #VUID-VkDirectFBSurfaceCreateInfoEXT-surface-04118# @surface@ /must/+    -- point to a valid DirectFB 'IDirectFBSurface'     surface :: Ptr IDirectFBSurface   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_EXT_discard_rectangles.hs view
@@ -95,40 +95,48 @@ -- -- == Valid Usage ----- -   The sum of @firstDiscardRectangle@ and @discardRectangleCount@---     /must/ be less than or equal to+-- -   #VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00585# The+--     sum of @firstDiscardRectangle@ and @discardRectangleCount@ /must/ be+--     less than or equal to --     'PhysicalDeviceDiscardRectanglePropertiesEXT'::@maxDiscardRectangles@ ----- -   The @x@ and @y@ member of @offset@ in each---     'Vulkan.Core10.FundamentalTypes.Rect2D' element of+-- -   #VUID-vkCmdSetDiscardRectangleEXT-x-00587# The @x@ and @y@ member of+--     @offset@ in each 'Vulkan.Core10.FundamentalTypes.Rect2D' element of --     @pDiscardRectangles@ /must/ be greater than or equal to @0@ ----- -   Evaluation of (@offset.x@ + @extent.width@) in each+-- -   #VUID-vkCmdSetDiscardRectangleEXT-offset-00588# Evaluation of+--     (@offset.x@ + @extent.width@) in each --     'Vulkan.Core10.FundamentalTypes.Rect2D' element of --     @pDiscardRectangles@ /must/ not cause a signed integer addition --     overflow ----- -   Evaluation of (@offset.y@ + @extent.height@) in each+-- -   #VUID-vkCmdSetDiscardRectangleEXT-offset-00589# Evaluation of+--     (@offset.y@ + @extent.height@) in each --     'Vulkan.Core10.FundamentalTypes.Rect2D' element of --     @pDiscardRectangles@ /must/ not cause a signed integer addition --     overflow -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pDiscardRectangles@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCmdSetDiscardRectangleEXT-pDiscardRectangles-parameter#+--     @pDiscardRectangles@ /must/ be a valid pointer to an array of --     @discardRectangleCount@ 'Vulkan.Core10.FundamentalTypes.Rect2D' --     structures ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetDiscardRectangleEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   @discardRectangleCount@ /must/ be greater than @0@+-- -   #VUID-vkCmdSetDiscardRectangleEXT-discardRectangleCount-arraylength#+--     @discardRectangleCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -197,8 +205,8 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDiscardRectanglePropertiesEXT = PhysicalDeviceDiscardRectanglePropertiesEXT-  { -- | @maxDiscardRectangles@ is the maximum number of active discard-    -- rectangles that /can/ be specified.+  { -- | #limits-maxDiscardRectangles# @maxDiscardRectangles@ is the maximum+    -- number of active discard rectangles that /can/ be specified.     maxDiscardRectangles :: Word32 }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -265,11 +273,13 @@ data PipelineDiscardRectangleStateCreateInfoEXT = PipelineDiscardRectangleStateCreateInfoEXT   { -- | @flags@ is reserved for future use.     --+    -- #VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-flags-zerobitmask#     -- @flags@ /must/ be @0@     flags :: PipelineDiscardRectangleStateCreateFlagsEXT   , -- | @discardRectangleMode@ is a 'DiscardRectangleModeEXT' value determining     -- whether the discard rectangle test is inclusive or exclusive.     --+    -- #VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleMode-parameter#     -- @discardRectangleMode@ /must/ be a valid 'DiscardRectangleModeEXT' value     discardRectangleMode :: DiscardRectangleModeEXT   , -- | @pDiscardRectangles@ is a pointer to an array of
src/Vulkan/Extensions/VK_EXT_display_control.hs view
@@ -116,16 +116,19 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDisplayPowerControlEXT-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'---     handle+-- -   #VUID-vkDisplayPowerControlEXT-display-parameter# @display@ /must/+--     be a valid 'Vulkan.Extensions.Handles.DisplayKHR' handle ----- -   @pDisplayPowerInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkDisplayPowerControlEXT-pDisplayPowerInfo-parameter#+--     @pDisplayPowerInfo@ /must/ be a valid pointer to a valid --     'DisplayPowerInfoEXT' structure ----- -   Both of @device@, and @display@ /must/ have been created, allocated,---     or retrieved from the same 'Vulkan.Core10.Handles.PhysicalDevice'+-- -   #VUID-vkDisplayPowerControlEXT-commonparent# Both of @device@, and+--     @display@ /must/ have been created, allocated, or retrieved from the+--     same 'Vulkan.Core10.Handles.PhysicalDevice' -- -- == Return Codes --@@ -172,17 +175,19 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkRegisterDeviceEventEXT-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pDeviceEventInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkRegisterDeviceEventEXT-pDeviceEventInfo-parameter#+--     @pDeviceEventInfo@ /must/ be a valid pointer to a valid --     'DeviceEventInfoEXT' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkRegisterDeviceEventEXT-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pFence@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-vkRegisterDeviceEventEXT-pFence-parameter# @pFence@ /must/ be+--     a valid pointer to a 'Vulkan.Core10.Handles.Fence' handle -- -- == Return Codes --@@ -238,23 +243,27 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkRegisterDisplayEventEXT-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'---     handle+-- -   #VUID-vkRegisterDisplayEventEXT-display-parameter# @display@ /must/+--     be a valid 'Vulkan.Extensions.Handles.DisplayKHR' handle ----- -   @pDisplayEventInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkRegisterDisplayEventEXT-pDisplayEventInfo-parameter#+--     @pDisplayEventInfo@ /must/ be a valid pointer to a valid --     'DisplayEventInfoEXT' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkRegisterDisplayEventEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pFence@ /must/ be a valid pointer to a---     'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-vkRegisterDisplayEventEXT-pFence-parameter# @pFence@ /must/ be+--     a valid pointer to a 'Vulkan.Core10.Handles.Fence' handle ----- -   Both of @device@, and @display@ /must/ have been created, allocated,---     or retrieved from the same 'Vulkan.Core10.Handles.PhysicalDevice'+-- -   #VUID-vkRegisterDisplayEventEXT-commonparent# Both of @device@, and+--     @display@ /must/ have been created, allocated, or retrieved from the+--     same 'Vulkan.Core10.Handles.PhysicalDevice' -- -- == Return Codes --@@ -318,25 +327,29 @@ -- -- == Valid Usage ----- -   One or more present commands on @swapchain@ /must/ have been---     processed by the presentation engine+-- -   #VUID-vkGetSwapchainCounterEXT-swapchain-01245# One or more present+--     commands on @swapchain@ /must/ have been processed by the+--     presentation engine -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetSwapchainCounterEXT-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @swapchain@ /must/ be a valid---     'Vulkan.Extensions.Handles.SwapchainKHR' handle+-- -   #VUID-vkGetSwapchainCounterEXT-swapchain-parameter# @swapchain@+--     /must/ be a valid 'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   @counter@ /must/ be a valid+-- -   #VUID-vkGetSwapchainCounterEXT-counter-parameter# @counter@ /must/+--     be a valid --     'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT' --     value ----- -   @pCounterValue@ /must/ be a valid pointer to a @uint64_t@ value+-- -   #VUID-vkGetSwapchainCounterEXT-pCounterValue-parameter#+--     @pCounterValue@ /must/ be a valid pointer to a @uint64_t@ value ----- -   Both of @device@, and @swapchain@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetSwapchainCounterEXT-commonparent# Both of @device@, and+--     @swapchain@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Instance' -- -- == Return Codes --@@ -392,7 +405,8 @@   { -- | @powerState@ is a 'DisplayPowerStateEXT' value specifying the new power     -- state of the display.     ---    -- @powerState@ /must/ be a valid 'DisplayPowerStateEXT' value+    -- #VUID-VkDisplayPowerInfoEXT-powerState-parameter# @powerState@ /must/ be+    -- a valid 'DisplayPowerStateEXT' value     powerState :: DisplayPowerStateEXT }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -441,7 +455,8 @@ -- 'DeviceEventTypeEXT', 'Vulkan.Core10.Enums.StructureType.StructureType', -- 'registerDeviceEventEXT' data DeviceEventInfoEXT = DeviceEventInfoEXT-  { -- | @deviceEvent@ /must/ be a valid 'DeviceEventTypeEXT' value+  { -- | #VUID-VkDeviceEventInfoEXT-deviceEvent-parameter# @deviceEvent@ /must/+    -- be a valid 'DeviceEventTypeEXT' value     deviceEvent :: DeviceEventTypeEXT }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -494,7 +509,8 @@   { -- | @displayEvent@ is a 'DisplayEventTypeEXT' specifying when the fence will     -- be signaled.     ---    -- @displayEvent@ /must/ be a valid 'DisplayEventTypeEXT' value+    -- #VUID-VkDisplayEventInfoEXT-displayEvent-parameter# @displayEvent@+    -- /must/ be a valid 'DisplayEventTypeEXT' value     displayEvent :: DisplayEventTypeEXT }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -538,17 +554,19 @@ -- -- == Valid Usage ----- -   The bits in @surfaceCounters@ /must/ be supported by+-- -   #VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-01244# The+--     bits in @surfaceCounters@ /must/ be supported by --     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR'::@surface@, --     as reported by --     'Vulkan.Extensions.VK_EXT_display_surface_counter.getPhysicalDeviceSurfaceCapabilities2EXT' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSwapchainCounterCreateInfoEXT-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT' ----- -   @surfaceCounters@ /must/ be a valid combination of+-- -   #VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-parameter#+--     @surfaceCounters@ /must/ be a valid combination of --     'Vulkan.Extensions.VK_EXT_display_surface_counter.SurfaceCounterFlagBitsEXT' --     values --
src/Vulkan/Extensions/VK_EXT_display_surface_counter.hs view
@@ -101,16 +101,20 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-surface-parameter#+--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' --     handle ----- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-pSurfaceCapabilities-parameter#+--     @pSurfaceCapabilities@ /must/ be a valid pointer to a --     'SurfaceCapabilities2EXT' structure ----- -   Both of @physicalDevice@, and @surface@ /must/ have been created,+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2EXT-commonparent# Both+--     of @physicalDevice@, and @surface@ /must/ have been created, --     allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Instance' --@@ -207,6 +211,7 @@   , -- | @supportedSurfaceCounters@ is a bitmask of 'SurfaceCounterFlagBitsEXT'     -- indicating the supported surface counter types.     --+    -- #VUID-VkSurfaceCapabilities2EXT-supportedSurfaceCounters-01246#     -- @supportedSurfaceCounters@ /must/ not include     -- 'SURFACE_COUNTER_VBLANK_BIT_EXT' unless the surface queried is a     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#wsi-display-surfaces display surface>
src/Vulkan/Extensions/VK_EXT_extended_dynamic_state.hs view
@@ -101,22 +101,25 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetCullModeEXT-None-03384# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdSetCullModeEXT-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @cullMode@ /must/ be a valid combination of+-- -   #VUID-vkCmdSetCullModeEXT-cullMode-parameter# @cullMode@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.CullModeFlagBits.CullModeFlagBits' values ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetCullModeEXT-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetCullModeEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -169,22 +172,24 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetFrontFaceEXT-None-03383# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdSetFrontFaceEXT-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @frontFace@ /must/ be a valid---     'Vulkan.Core10.Enums.FrontFace.FrontFace' value+-- -   #VUID-vkCmdSetFrontFaceEXT-frontFace-parameter# @frontFace@ /must/+--     be a valid 'Vulkan.Core10.Enums.FrontFace.FrontFace' value ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetFrontFaceEXT-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetFrontFaceEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -237,22 +242,26 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetPrimitiveTopologyEXT-None-03347# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetPrimitiveTopologyEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @primitiveTopology@ /must/ be a valid+-- -   #VUID-vkCmdSetPrimitiveTopologyEXT-primitiveTopology-parameter#+--     @primitiveTopology@ /must/ be a valid --     'Vulkan.Core10.Enums.PrimitiveTopology.PrimitiveTopology' value ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetPrimitiveTopologyEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetPrimitiveTopologyEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -305,33 +314,39 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetViewportWithCountEXT-None-03393# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled ----- -   @viewportCount@ /must/ be between @1@ and+-- -   #VUID-vkCmdSetViewportWithCountEXT-viewportCount-03394#+--     @viewportCount@ /must/ be between @1@ and --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@, --     inclusive ----- -   If the+-- -   #VUID-vkCmdSetViewportWithCountEXT-viewportCount-03395# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports> --     feature is not enabled, @viewportCount@ /must/ be @1@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetViewportWithCountEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pViewports@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCmdSetViewportWithCountEXT-pViewports-parameter#+--     @pViewports@ /must/ be a valid pointer to an array of --     @viewportCount@ valid 'Vulkan.Core10.Pipeline.Viewport' structures ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetViewportWithCountEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetViewportWithCountEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   @viewportCount@ /must/ be greater than @0@+-- -   #VUID-vkCmdSetViewportWithCountEXT-viewportCount-arraylength#+--     @viewportCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -384,42 +399,51 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetScissorWithCountEXT-None-03396# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled ----- -   @scissorCount@ /must/ be between @1@ and+-- -   #VUID-vkCmdSetScissorWithCountEXT-scissorCount-03397# @scissorCount@+--     /must/ be between @1@ and --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@, --     inclusive ----- -   If the+-- -   #VUID-vkCmdSetScissorWithCountEXT-scissorCount-03398# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports> --     feature is not enabled, @scissorCount@ /must/ be @1@ ----- -   The @x@ and @y@ members of @offset@ member of any element of---     @pScissors@ /must/ be greater than or equal to @0@+-- -   #VUID-vkCmdSetScissorWithCountEXT-x-03399# The @x@ and @y@ members+--     of @offset@ member of any element of @pScissors@ /must/ be greater+--     than or equal to @0@ ----- -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a---     signed integer addition overflow for any element of @pScissors@+-- -   #VUID-vkCmdSetScissorWithCountEXT-offset-03400# Evaluation of+--     (@offset.x@ + @extent.width@) /must/ not cause a signed integer+--     addition overflow for any element of @pScissors@ ----- -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a---     signed integer addition overflow for any element of @pScissors@+-- -   #VUID-vkCmdSetScissorWithCountEXT-offset-03401# Evaluation of+--     (@offset.y@ + @extent.height@) /must/ not cause a signed integer+--     addition overflow for any element of @pScissors@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetScissorWithCountEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pScissors@ /must/ be a valid pointer to an array of @scissorCount@+-- -   #VUID-vkCmdSetScissorWithCountEXT-pScissors-parameter# @pScissors@+--     /must/ be a valid pointer to an array of @scissorCount@ --     'Vulkan.Core10.FundamentalTypes.Rect2D' structures ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetScissorWithCountEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetScissorWithCountEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   @scissorCount@ /must/ be greater than @0@+-- -   #VUID-vkCmdSetScissorWithCountEXT-scissorCount-arraylength#+--     @scissorCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -493,82 +517,95 @@ -- -- == Valid Usage ----- -   @firstBinding@ /must/ be less than+-- -   #VUID-vkCmdBindVertexBuffers2EXT-firstBinding-03355# @firstBinding@+--     /must/ be less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@ ----- -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or---     equal to+-- -   #VUID-vkCmdBindVertexBuffers2EXT-firstBinding-03356# The sum of+--     @firstBinding@ and @bindingCount@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@ ----- -   All elements of @pOffsets@ /must/ be less than the size of the---     corresponding element in @pBuffers@+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pOffsets-03357# All elements of+--     @pOffsets@ /must/ be less than the size of the corresponding element+--     in @pBuffers@ ----- -   If @pSizes@ is not @NULL@, all elements of @pOffsets@ plus @pSizes@---     /must/ be less than or equal to the size of the corresponding---     element in @pBuffers@+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pSizes-03358# If @pSizes@ is not+--     @NULL@, all elements of @pOffsets@ plus @pSizes@ /must/ be less than+--     or equal to the size of the corresponding element in @pBuffers@ ----- -   All elements of @pBuffers@ /must/ have been created with the+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pBuffers-03359# All elements of+--     @pBuffers@ /must/ have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT' --     flag ----- -   Each element of @pBuffers@ that is non-sparse /must/ be bound---     completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pBuffers-03360# Each element of+--     @pBuffers@ that is non-sparse /must/ be bound completely and+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   If the+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pBuffers-04111# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor> --     feature is not enabled, all elements of @pBuffers@ /must/ not be --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If an element of @pBuffers@ is---     'Vulkan.Core10.APIConstants.NULL_HANDLE', then the corresponding---     element of @pOffsets@ /must/ be zero+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pBuffers-04112# If an element of+--     @pBuffers@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', then the+--     corresponding element of @pOffsets@ /must/ be zero ----- -   If the bound pipeline state object was created with the+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pStrides-03361# If the bound+--     pipeline state object was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT' --     dynamic state enabled then @pStrides@ /must/ not be @NULL@, --     otherwise @pStrides@ /must/ be @NULL@ ----- -   If @pStrides@ is not @NULL@ each element of @pStrides@ /must/ be---     less than or equal to+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pStrides-03362# If @pStrides@ is+--     not @NULL@ each element of @pStrides@ /must/ be less than or equal+--     to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindingStride@ ----- -   If @pStrides@ is not @NULL@ each element of @pStrides@ /must/ be---     greater than or equal to the maximum extent of of all vertex input---     attributes fetched from the corresponding binding, where the extent---     is calculated as the VkVertexInputAttributeDescription::offset plus+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pStrides-03363# If @pStrides@ is+--     not @NULL@ each element of @pStrides@ /must/ be greater than or+--     equal to the maximum extent of of all vertex input attributes+--     fetched from the corresponding binding, where the extent is+--     calculated as the VkVertexInputAttributeDescription::offset plus --     VkVertexInputAttributeDescription::format size -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBindVertexBuffers2EXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@---     valid 'Vulkan.Core10.Handles.Buffer' handles+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pBuffers-parameter# @pBuffers@+--     /must/ be a valid pointer to an array of @bindingCount@ valid+--     'Vulkan.Core10.Handles.Buffer' handles ----- -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pOffsets-parameter# @pOffsets@+--     /must/ be a valid pointer to an array of @bindingCount@ --     'Vulkan.Core10.FundamentalTypes.DeviceSize' values ----- -   If @pSizes@ is not @NULL@, @pSizes@ /must/ be a valid pointer to an---     array of @bindingCount@ 'Vulkan.Core10.FundamentalTypes.DeviceSize'---     values+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pSizes-parameter# If @pSizes@ is+--     not @NULL@, @pSizes@ /must/ be a valid pointer to an array of+--     @bindingCount@ 'Vulkan.Core10.FundamentalTypes.DeviceSize' values ----- -   If @pStrides@ is not @NULL@, @pStrides@ /must/ be a valid pointer to---     an array of @bindingCount@---     'Vulkan.Core10.FundamentalTypes.DeviceSize' values+-- -   #VUID-vkCmdBindVertexBuffers2EXT-pStrides-parameter# If @pStrides@+--     is not @NULL@, @pStrides@ /must/ be a valid pointer to an array of+--     @bindingCount@ 'Vulkan.Core10.FundamentalTypes.DeviceSize' values ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBindVertexBuffers2EXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBindVertexBuffers2EXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   If any of @pSizes@, or @pStrides@ are not @NULL@, @bindingCount@---     /must/ be greater than @0@+-- -   #VUID-vkCmdBindVertexBuffers2EXT-bindingCount-arraylength# If any of+--     @pSizes@, or @pStrides@ are not @NULL@, @bindingCount@ /must/ be+--     greater than @0@ ----- -   Both of @commandBuffer@, and the elements of @pBuffers@ /must/ have---     been created, allocated, or retrieved from the same+-- -   #VUID-vkCmdBindVertexBuffers2EXT-commonparent# Both of+--     @commandBuffer@, and the elements of @pBuffers@ /must/ have been+--     created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization@@ -666,19 +703,22 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetDepthTestEnableEXT-None-03352# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetDepthTestEnableEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetDepthTestEnableEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetDepthTestEnableEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -740,19 +780,22 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetDepthWriteEnableEXT-None-03354# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetDepthWriteEnableEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetDepthWriteEnableEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetDepthWriteEnableEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -814,22 +857,26 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetDepthCompareOpEXT-None-03353# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetDepthCompareOpEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @depthCompareOp@ /must/ be a valid+-- -   #VUID-vkCmdSetDepthCompareOpEXT-depthCompareOp-parameter#+--     @depthCompareOp@ /must/ be a valid --     'Vulkan.Core10.Enums.CompareOp.CompareOp' value ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetDepthCompareOpEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetDepthCompareOpEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -891,19 +938,22 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetDepthBoundsTestEnableEXT-None-03349# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetDepthBoundsTestEnableEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetDepthBoundsTestEnableEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetDepthBoundsTestEnableEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -965,19 +1015,22 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetStencilTestEnableEXT-None-03350# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetStencilTestEnableEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetStencilTestEnableEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetStencilTestEnableEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -1037,36 +1090,40 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetStencilOpEXT-None-03351# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-extendedDynamicState extendedDynamicState> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdSetStencilOpEXT-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @faceMask@ /must/ be a valid combination of+-- -   #VUID-vkCmdSetStencilOpEXT-faceMask-parameter# @faceMask@ /must/ be+--     a valid combination of --     'Vulkan.Core10.Enums.StencilFaceFlagBits.StencilFaceFlagBits' values ----- -   @faceMask@ /must/ not be @0@+-- -   #VUID-vkCmdSetStencilOpEXT-faceMask-requiredbitmask# @faceMask@+--     /must/ not be @0@ ----- -   @failOp@ /must/ be a valid 'Vulkan.Core10.Enums.StencilOp.StencilOp'---     value+-- -   #VUID-vkCmdSetStencilOpEXT-failOp-parameter# @failOp@ /must/ be a+--     valid 'Vulkan.Core10.Enums.StencilOp.StencilOp' value ----- -   @passOp@ /must/ be a valid 'Vulkan.Core10.Enums.StencilOp.StencilOp'---     value+-- -   #VUID-vkCmdSetStencilOpEXT-passOp-parameter# @passOp@ /must/ be a+--     valid 'Vulkan.Core10.Enums.StencilOp.StencilOp' value ----- -   @depthFailOp@ /must/ be a valid---     'Vulkan.Core10.Enums.StencilOp.StencilOp' value+-- -   #VUID-vkCmdSetStencilOpEXT-depthFailOp-parameter# @depthFailOp@+--     /must/ be a valid 'Vulkan.Core10.Enums.StencilOp.StencilOp' value ----- -   @compareOp@ /must/ be a valid---     'Vulkan.Core10.Enums.CompareOp.CompareOp' value+-- -   #VUID-vkCmdSetStencilOpEXT-compareOp-parameter# @compareOp@ /must/+--     be a valid 'Vulkan.Core10.Enums.CompareOp.CompareOp' value ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetStencilOpEXT-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetStencilOpEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -1150,8 +1207,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceExtendedDynamicStateFeaturesEXT = PhysicalDeviceExtendedDynamicStateFeaturesEXT-  { -- | @extendedDynamicState@ indicates that the implementation supports the-    -- following dynamic states:+  { -- | #features-extendedDynamicState# @extendedDynamicState@ indicates that+    -- the implementation supports the following dynamic states:     --     -- -   'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_CULL_MODE_EXT'     --
src/Vulkan/Extensions/VK_EXT_external_memory_host.hs view
@@ -67,31 +67,38 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ be+-- -   #VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01752#+--     @handleType@ /must/ be --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT' --     or --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT' ----- -   @pHostPointer@ /must/ be a pointer aligned to an integer multiple of+-- -   #VUID-vkGetMemoryHostPointerPropertiesEXT-pHostPointer-01753#+--     @pHostPointer@ /must/ be a pointer aligned to an integer multiple of --     'PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@ ----- -   If @handleType@ is+-- -   #VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01754# If+--     @handleType@ is --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT', --     @pHostPointer@ /must/ be a pointer to host memory ----- -   If @handleType@ is+-- -   #VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-01755# If+--     @handleType@ is --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT', --     @pHostPointer@ /must/ be a pointer to host mapped foreign memory -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetMemoryHostPointerPropertiesEXT-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @handleType@ /must/ be a valid+-- -   #VUID-vkGetMemoryHostPointerPropertiesEXT-handleType-parameter#+--     @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits' --     value ----- -   @pMemoryHostPointerProperties@ /must/ be a valid pointer to a+-- -   #VUID-vkGetMemoryHostPointerPropertiesEXT-pMemoryHostPointerProperties-parameter#+--     @pMemoryHostPointerProperties@ /must/ be a valid pointer to a --     'MemoryHostPointerPropertiesEXT' structure -- -- == Return Codes@@ -161,26 +168,31 @@ -- -- == Valid Usage ----- -   If @handleType@ is not @0@, it /must/ be supported for import, as+-- -   #VUID-VkImportMemoryHostPointerInfoEXT-handleType-01747# If+--     @handleType@ is not @0@, it /must/ be supported for import, as --     reported in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalMemoryProperties' ----- -   If @handleType@ is not @0@, it /must/ be+-- -   #VUID-VkImportMemoryHostPointerInfoEXT-handleType-01748# If+--     @handleType@ is not @0@, it /must/ be --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT' --     or --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT' ----- -   @pHostPointer@ /must/ be a pointer aligned to an integer multiple of+-- -   #VUID-VkImportMemoryHostPointerInfoEXT-pHostPointer-01749#+--     @pHostPointer@ /must/ be a pointer aligned to an integer multiple of --     'PhysicalDeviceExternalMemoryHostPropertiesEXT'::@minImportedHostPointerAlignment@ ----- -   If @handleType@ is+-- -   #VUID-VkImportMemoryHostPointerInfoEXT-handleType-01750# If+--     @handleType@ is --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT', --     @pHostPointer@ /must/ be a pointer to @allocationSize@ number of --     bytes of host memory, where @allocationSize@ is the member of the --     'Vulkan.Core10.Memory.MemoryAllocateInfo' structure this structure --     is chained to ----- -   If @handleType@ is+-- -   #VUID-VkImportMemoryHostPointerInfoEXT-handleType-01751# If+--     @handleType@ is --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT', --     @pHostPointer@ /must/ be a pointer to @allocationSize@ number of --     bytes of host mapped foreign memory, where @allocationSize@ is the@@ -189,10 +201,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImportMemoryHostPointerInfoEXT-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT' ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkImportMemoryHostPointerInfoEXT-handleType-parameter#+--     @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits' --     value --@@ -327,7 +341,8 @@ -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceExternalMemoryHostPropertiesEXT = PhysicalDeviceExternalMemoryHostPropertiesEXT-  { -- | @minImportedHostPointerAlignment@ is the minimum /required/ alignment,+  { -- | #limits-minImportedHostPointerAlignment#+    -- @minImportedHostPointerAlignment@ is the minimum /required/ alignment,     -- in bytes, for the base address and size of host pointers that /can/ be     -- imported to a Vulkan memory object.     minImportedHostPointerAlignment :: DeviceSize }
src/Vulkan/Extensions/VK_EXT_filter_cubic.hs view
@@ -57,6 +57,7 @@   { -- | @imageViewType@ is a 'Vulkan.Core10.Enums.ImageViewType.ImageViewType'     -- value specifying the type of the image view.     --+    -- #VUID-VkPhysicalDeviceImageViewImageFormatInfoEXT-imageViewType-parameter#     -- @imageViewType@ /must/ be a valid     -- 'Vulkan.Core10.Enums.ImageViewType.ImageViewType' value     imageViewType :: ImageViewType }@@ -103,12 +104,14 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT' -- -- == Valid Usage ----- -   If the @pNext@ chain of the+-- -   #VUID-VkFilterCubicImageViewImageFormatPropertiesEXT-pNext-02627# If+--     the @pNext@ chain of the --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2' --     structure includes a 'FilterCubicImageViewImageFormatPropertiesEXT' --     structure, the @pNext@ chain of the
src/Vulkan/Extensions/VK_EXT_fragment_density_map.hs view
@@ -62,22 +62,23 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFragmentDensityMapFeaturesEXT = PhysicalDeviceFragmentDensityMapFeaturesEXT-  { -- | @fragmentDensityMap@ specifies whether the implementation supports-    -- render passes with a fragment density map attachment. If this feature is-    -- not enabled and the @pNext@ chain of+  { -- | #features-fragmentDensityMap# @fragmentDensityMap@ specifies whether the+    -- implementation supports render passes with a fragment density map+    -- attachment. If this feature is not enabled and the @pNext@ chain of     -- 'Vulkan.Core10.Pass.RenderPassCreateInfo' includes a     -- 'RenderPassFragmentDensityMapCreateInfoEXT' structure,     -- @fragmentDensityMapAttachment@ /must/ be     -- 'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED'.     fragmentDensityMap :: Bool-  , -- | @fragmentDensityMapDynamic@ specifies whether the implementation-    -- supports dynamic fragment density map image views. If this feature is-    -- not enabled,+  , -- | #features-fragmentDensityMapDynamic# @fragmentDensityMapDynamic@+    -- specifies whether the implementation supports dynamic fragment density+    -- map image views. If this feature is not enabled,     -- 'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT'     -- /must/ not be included in     -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@flags@.     fragmentDensityMapDynamic :: Bool-  , -- | @fragmentDensityMapNonSubsampledImages@ specifies whether the+  , -- | #features-fragmentDensityMapNonSubsampledImages#+    -- @fragmentDensityMapNonSubsampledImages@ specifies whether the     -- implementation supports regular non-subsampled image attachments with     -- fragment density map render passes. If this feature is not enabled,     -- render passes with a@@ -155,14 +156,16 @@ -- 'Vulkan.Core10.FundamentalTypes.Extent2D', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFragmentDensityMapPropertiesEXT = PhysicalDeviceFragmentDensityMapPropertiesEXT-  { -- | @minFragmentDensityTexelSize@ is the minimum+  { -- | #limits-minfragmentdensitytexelsize# @minFragmentDensityTexelSize@ is+    -- the minimum     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#glossary-fragment-density-texel-size fragment density texel size>.     minFragmentDensityTexelSize :: Extent2D-  , -- | @maxFragmentDensityTexelSize@ is the maximum fragment density texel-    -- size.+  , -- | #limits-maxfragmentdensitytexelsize# @maxFragmentDensityTexelSize@ is+    -- the maximum fragment density texel size.     maxFragmentDensityTexelSize :: Extent2D-  , -- | @fragmentDensityInvocations@ specifies whether the implementation /may/-    -- invoke additional fragment shader invocations for each covered sample.+  , -- | #limits-fragmentdensityinvocations# @fragmentDensityInvocations@+    -- specifies whether the implementation /may/ invoke additional fragment+    -- shader invocations for each covered sample.     fragmentDensityInvocations :: Bool   }   deriving (Typeable)@@ -237,12 +240,14 @@ -- -- == Valid Usage ----- -   If @fragmentDensityMapAttachment@ is not+-- -   #VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02547#+--     If @fragmentDensityMapAttachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @fragmentDensityMapAttachment@ /must/ be less than --     'Vulkan.Core10.Pass.RenderPassCreateInfo'::@attachmentCount@ ----- -   If @fragmentDensityMapAttachment@ is not+-- -   #VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02548#+--     If @fragmentDensityMapAttachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @fragmentDensityMapAttachment@ /must/ not be an element of --     'Vulkan.Core10.Pass.SubpassDescription'::@pInputAttachments@,@@ -252,20 +257,23 @@ --     or 'Vulkan.Core10.Pass.SubpassDescription'::@pPreserveAttachments@ --     for any subpass ----- -   If @fragmentDensityMapAttachment@ is not+-- -   #VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02549#+--     If @fragmentDensityMapAttachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', @layout@ /must/ be --     equal to --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT', --     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' ----- -   If @fragmentDensityMapAttachment@ is not+-- -   #VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02550#+--     If @fragmentDensityMapAttachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @fragmentDensityMapAttachment@ /must/ reference an attachment with a --     @loadOp@ equal to --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_LOAD' or --     'Vulkan.Core10.Enums.AttachmentLoadOp.ATTACHMENT_LOAD_OP_DONT_CARE' ----- -   If @fragmentDensityMapAttachment@ is not+-- -   #VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-02551#+--     If @fragmentDensityMapAttachment@ is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @fragmentDensityMapAttachment@ /must/ reference an attachment with a --     @storeOp@ equal to@@ -273,10 +281,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT' ----- -   @fragmentDensityMapAttachment@ /must/ be a valid+-- -   #VUID-VkRenderPassFragmentDensityMapCreateInfoEXT-fragmentDensityMapAttachment-parameter#+--     @fragmentDensityMapAttachment@ /must/ be a valid --     'Vulkan.Core10.Pass.AttachmentReference' structure -- -- = See Also
src/Vulkan/Extensions/VK_EXT_fragment_density_map2.hs view
@@ -57,9 +57,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFragmentDensityMap2FeaturesEXT = PhysicalDeviceFragmentDensityMap2FeaturesEXT-  { -- | @fragmentDensityMapDeferred@ specifies whether the implementation-    -- supports deferred reads of fragment density map image views. If this-    -- feature is not enabled,+  { -- | #features-fragmentDensityMapDeferred# @fragmentDensityMapDeferred@+    -- specifies whether the implementation supports deferred reads of fragment+    -- density map image views. If this feature is not enabled,     -- 'Vulkan.Core10.Enums.ImageViewCreateFlagBits.IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT'     -- /must/ not be included in     -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@flags@.@@ -123,21 +123,23 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFragmentDensityMap2PropertiesEXT = PhysicalDeviceFragmentDensityMap2PropertiesEXT-  { -- | @subsampledLoads@ specifies if performing image data read with load-    -- operations on subsampled attachments will be resampled to the fragment-    -- density of the render pass+  { -- | #limits-subsampledLoads# @subsampledLoads@ specifies if performing image+    -- data read with load operations on subsampled attachments will be+    -- resampled to the fragment density of the render pass     subsampledLoads :: Bool-  , -- | @subsampledCoarseReconstructionEarlyAccess@ specifies if performing+  , -- | #limits-subsampledCoarseReconstructionEarlyAccess#+    -- @subsampledCoarseReconstructionEarlyAccess@ specifies if performing     -- image data read with samplers created with @flags@ containing     -- 'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT'     -- in fragment shader will trigger additional reads during     -- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_VERTEX_SHADER_BIT'     subsampledCoarseReconstructionEarlyAccess :: Bool-  , -- | @maxSubsampledArrayLayers@ is the maximum number of-    -- 'Vulkan.Core10.Handles.ImageView' array layers for usages supporting-    -- subsampled samplers+  , -- | #limits-maxSubsampledArrayLayers# @maxSubsampledArrayLayers@ is the+    -- maximum number of 'Vulkan.Core10.Handles.ImageView' array layers for+    -- usages supporting subsampled samplers     maxSubsampledArrayLayers :: Word32-  , -- | @maxDescriptorSetSubsampledSamplers@ is the maximum number of subsampled+  , -- | #limits-maxDescriptorSetSubsampledSamplers#+    -- @maxDescriptorSetSubsampledSamplers@ is the maximum number of subsampled     -- samplers that /can/ be included in a     -- 'Vulkan.Core10.Handles.PipelineLayout'     maxDescriptorSetSubsampledSamplers :: Word32
src/Vulkan/Extensions/VK_EXT_fragment_shader_interlock.hs view
@@ -54,13 +54,16 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFragmentShaderInterlockFeaturesEXT = PhysicalDeviceFragmentShaderInterlockFeaturesEXT-  { -- | @fragmentShaderSampleInterlock@ indicates that the implementation-    -- supports the @FragmentShaderSampleInterlockEXT@ SPIR-V capability.+  { -- | #features-fragmentShaderSampleInterlock# @fragmentShaderSampleInterlock@+    -- indicates that the implementation supports the+    -- @FragmentShaderSampleInterlockEXT@ SPIR-V capability.     fragmentShaderSampleInterlock :: Bool-  , -- | @fragmentShaderPixelInterlock@ indicates that the implementation-    -- supports the @FragmentShaderPixelInterlockEXT@ SPIR-V capability.+  , -- | #features-fragmentShaderPixelInterlock# @fragmentShaderPixelInterlock@+    -- indicates that the implementation supports the+    -- @FragmentShaderPixelInterlockEXT@ SPIR-V capability.     fragmentShaderPixelInterlock :: Bool-  , -- | @fragmentShaderShadingRateInterlock@ indicates that the implementation+  , -- | #features-fragmentShaderShadingRateInterlock#+    -- @fragmentShaderShadingRateInterlock@ indicates that the implementation     -- supports the @FragmentShaderShadingRateInterlockEXT@ SPIR-V capability.     fragmentShaderShadingRateInterlock :: Bool   }
src/Vulkan/Extensions/VK_EXT_full_screen_exclusive.hs view
@@ -132,16 +132,20 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pSurfaceInfo-parameter#+--     @pSurfaceInfo@ /must/ be a valid pointer to a valid --     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR' --     structure ----- -   @pPresentModeCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pPresentModeCount-parameter#+--     @pPresentModeCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPresentModeCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-pPresentModes-parameter#+--     If the value referenced by @pPresentModeCount@ is not @0@, and --     @pPresentModes@ is not @NULL@, @pPresentModes@ /must/ be a valid --     pointer to an array of @pPresentModeCount@ --     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' values@@ -239,13 +243,15 @@                                        . (Extendss PhysicalDeviceSurfaceInfo2KHR a, PokeChain a, MonadIO io)                                       => -- | @device@ is the logical device.                                          ---                                         -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                         -- #VUID-vkGetDeviceGroupSurfacePresentModes2EXT-device-parameter# @device@+                                         -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                          Device                                       -> -- | @pSurfaceInfo@ is a pointer to a                                          -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'                                          -- structure describing the surface and other fixed parameters that would                                          -- be consumed by 'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'.                                          --+                                         -- #VUID-vkGetDeviceGroupSurfacePresentModes2EXT-pSurfaceInfo-parameter#                                          -- @pSurfaceInfo@ /must/ be a valid pointer to a valid                                          -- 'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.PhysicalDeviceSurfaceInfo2KHR'                                          -- structure@@ -276,14 +282,17 @@ -- -- == Valid Usage ----- -   @swapchain@ /must/ not be in the retired state+-- -   #VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02674#+--     @swapchain@ /must/ not be in the retired state ----- -   @swapchain@ /must/ be a swapchain created with a+-- -   #VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02675#+--     @swapchain@ /must/ be a swapchain created with a --     'SurfaceFullScreenExclusiveInfoEXT' structure, with --     @fullScreenExclusive@ set to --     'FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT' ----- -   @swapchain@ /must/ not currently have exclusive full-screen access+-- -   #VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-02676#+--     @swapchain@ /must/ not currently have exclusive full-screen access -- -- A return value of 'Vulkan.Core10.Enums.Result.SUCCESS' indicates that -- the @swapchain@ successfully acquired exclusive full-screen access. The@@ -304,14 +313,16 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkAcquireFullScreenExclusiveModeEXT-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @swapchain@ /must/ be a valid+-- -   #VUID-vkAcquireFullScreenExclusiveModeEXT-swapchain-parameter#+--     @swapchain@ /must/ be a valid --     'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   Both of @device@, and @swapchain@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkAcquireFullScreenExclusiveModeEXT-commonparent# Both of+--     @device@, and @swapchain@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Instance' -- -- == Return Codes --@@ -380,11 +391,12 @@                                   -> -- | @swapchain@ is the swapchain to release exclusive full-screen access                                      -- from.                                      ---                                     -- @swapchain@ /must/ not be in the retired state+                                     -- #VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02677# @swapchain@+                                     -- /must/ not be in the retired state                                      ---                                     -- @swapchain@ /must/ be a swapchain created with a-                                     -- 'SurfaceFullScreenExclusiveInfoEXT' structure, with-                                     -- @fullScreenExclusive@ set to+                                     -- #VUID-vkReleaseFullScreenExclusiveModeEXT-swapchain-02678# @swapchain@+                                     -- /must/ be a swapchain created with a 'SurfaceFullScreenExclusiveInfoEXT'+                                     -- structure, with @fullScreenExclusive@ set to                                      -- 'FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT'                                      SwapchainKHR                                   -> io ()@@ -415,6 +427,7 @@   { -- | @fullScreenExclusive@ is a 'FullScreenExclusiveEXT' value specifying the     -- preferred full-screen transition behavior.     --+    -- #VUID-VkSurfaceFullScreenExclusiveInfoEXT-fullScreenExclusive-parameter#     -- @fullScreenExclusive@ /must/ be a valid 'FullScreenExclusiveEXT' value     fullScreenExclusive :: FullScreenExclusiveEXT }   deriving (Typeable, Eq)@@ -484,6 +497,7 @@   { -- | @hmonitor@ is the Win32 'HMONITOR' handle identifying the display to     -- create the surface with.     --+    -- #VUID-VkSurfaceFullScreenExclusiveWin32InfoEXT-hmonitor-02673#     -- @hmonitor@ /must/ be a valid 'HMONITOR'     hmonitor :: HMONITOR }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_EXT_global_priority.hs view
@@ -63,6 +63,7 @@   { -- | @globalPriority@ is the system-wide priority associated to this queue as     -- specified by 'QueueGlobalPriorityEXT'     --+    -- #VUID-VkDeviceQueueGlobalPriorityCreateInfoEXT-globalPriority-parameter#     -- @globalPriority@ /must/ be a valid 'QueueGlobalPriorityEXT' value     globalPriority :: QueueGlobalPriorityEXT }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_EXT_hdr_metadata.hs view
@@ -64,20 +64,23 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkSetHdrMetadataEXT-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pSwapchains@ /must/ be a valid pointer to an array of---     @swapchainCount@ valid 'Vulkan.Extensions.Handles.SwapchainKHR'---     handles+-- -   #VUID-vkSetHdrMetadataEXT-pSwapchains-parameter# @pSwapchains@+--     /must/ be a valid pointer to an array of @swapchainCount@ valid+--     'Vulkan.Extensions.Handles.SwapchainKHR' handles ----- -   @pMetadata@ /must/ be a valid pointer to an array of---     @swapchainCount@ valid 'HdrMetadataEXT' structures+-- -   #VUID-vkSetHdrMetadataEXT-pMetadata-parameter# @pMetadata@ /must/ be+--     a valid pointer to an array of @swapchainCount@ valid+--     'HdrMetadataEXT' structures ----- -   @swapchainCount@ /must/ be greater than @0@+-- -   #VUID-vkSetHdrMetadataEXT-swapchainCount-arraylength#+--     @swapchainCount@ /must/ be greater than @0@ ----- -   Both of @device@, and the elements of @pSwapchains@ /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkSetHdrMetadataEXT-commonparent# Both of @device@, and the+--     elements of @pSwapchains@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Instance' -- -- = See Also --
src/Vulkan/Extensions/VK_EXT_headless_surface.hs view
@@ -82,16 +82,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateHeadlessSurfaceEXT-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateHeadlessSurfaceEXT-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'HeadlessSurfaceCreateInfoEXT' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateHeadlessSurfaceEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSurface@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateHeadlessSurfaceEXT-pSurface-parameter# @pSurface@+--     /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes@@ -152,7 +156,8 @@ data HeadlessSurfaceCreateInfoEXT = HeadlessSurfaceCreateInfoEXT   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkHeadlessSurfaceCreateInfoEXT-flags-zerobitmask# @flags@ /must/+    -- be @0@     flags :: HeadlessSurfaceCreateFlagsEXT }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_EXT_image_drm_format_modifier.hs view
@@ -95,17 +95,20 @@                                         . (MonadIO io)                                        => -- | @device@ is the logical device that owns the image.                                           --+                                          -- #VUID-vkGetImageDrmFormatModifierPropertiesEXT-device-parameter#                                           -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                           Device                                        -> -- | @image@ is the queried image.                                           ---                                          -- @image@ /must/ have been created with <VkImageCreateInfo.html tiling>-                                          -- equal to+                                          -- #VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-02272# @image@+                                          -- /must/ have been created with <VkImageCreateInfo.html tiling> equal to                                           -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'                                           ---                                          -- @image@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+                                          -- #VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-parameter# @image@+                                          -- /must/ be a valid 'Vulkan.Core10.Handles.Image' handle                                           ---                                          -- @image@ /must/ have been created, allocated, or retrieved from @device@+                                          -- #VUID-vkGetImageDrmFormatModifierPropertiesEXT-image-parent# @image@+                                          -- /must/ have been created, allocated, or retrieved from @device@                                           Image                                        -> io (ImageDrmFormatModifierPropertiesEXT) getImageDrmFormatModifierPropertiesEXT device image = liftIO . evalContT $ do@@ -348,16 +351,19 @@ -- -- == Valid Usage ----- -   If @sharingMode@ is+-- -   #VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02314#+--     If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', then --     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of --     @queueFamilyIndexCount@ @uint32_t@ values ----- -   If @sharingMode@ is+-- -   #VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02315#+--     If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', then --     @queueFamilyIndexCount@ /must/ be greater than @1@ ----- -   If @sharingMode@ is+-- -   #VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-02316#+--     If @sharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', each --     element of @pQueueFamilyIndices@ /must/ be unique and /must/ be less --     than the @pQueueFamilyPropertyCount@ returned by@@ -366,10 +372,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT' ----- -   @sharingMode@ /must/ be a valid+-- -   #VUID-VkPhysicalDeviceImageDrmFormatModifierInfoEXT-sharingMode-parameter#+--     @sharingMode@ /must/ be a valid --     'Vulkan.Core10.Enums.SharingMode.SharingMode' value -- -- = See Also@@ -442,7 +450,8 @@ -- -- == Valid Usage ----- -   Each /modifier/ in @pDrmFormatModifiers@ /must/ be compatible with+-- -   #VUID-VkImageDrmFormatModifierListCreateInfoEXT-pDrmFormatModifiers-02263#+--     Each /modifier/ in @pDrmFormatModifiers@ /must/ be compatible with --     the parameters in 'Vulkan.Core10.Image.ImageCreateInfo' and its --     @pNext@ chain, as determined by querying --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'@@ -450,13 +459,16 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageDrmFormatModifierListCreateInfoEXT-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT' ----- -   @pDrmFormatModifiers@ /must/ be a valid pointer to an array of+-- -   #VUID-VkImageDrmFormatModifierListCreateInfoEXT-pDrmFormatModifiers-parameter#+--     @pDrmFormatModifiers@ /must/ be a valid pointer to an array of --     @drmFormatModifierCount@ @uint64_t@ values ----- -   @drmFormatModifierCount@ /must/ be greater than @0@+-- -   #VUID-VkImageDrmFormatModifierListCreateInfoEXT-drmFormatModifierCount-arraylength#+--     @drmFormatModifierCount@ /must/ be greater than @0@ -- -- = See Also --@@ -530,32 +542,39 @@ -- -- == Valid Usage ----- -   @drmFormatModifier@ /must/ be compatible with the parameters in+-- -   #VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifier-02264#+--     @drmFormatModifier@ /must/ be compatible with the parameters in --     'Vulkan.Core10.Image.ImageCreateInfo' and its @pNext@ chain, as --     determined by querying --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2' --     extended with 'PhysicalDeviceImageDrmFormatModifierInfoEXT' ----- -   @drmFormatModifierPlaneCount@ /must/ be equal to the+-- -   #VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-02265#+--     @drmFormatModifierPlaneCount@ /must/ be equal to the --     'DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@ --     associated with 'Vulkan.Core10.Image.ImageCreateInfo'::@format@ and --     @drmFormatModifier@, as found by querying --     'DrmFormatModifierPropertiesListEXT' ----- -   For each element of @pPlaneLayouts@, @size@ /must/ be 0+-- -   #VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-size-02267# For+--     each element of @pPlaneLayouts@, @size@ /must/ be 0 ----- -   For each element of @pPlaneLayouts@, @arrayPitch@ /must/ be 0 if+-- -   #VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-arrayPitch-02268#+--     For each element of @pPlaneLayouts@, @arrayPitch@ /must/ be 0 if --     'Vulkan.Core10.Image.ImageCreateInfo'::@arrayLayers@ is 1 ----- -   For each element of @pPlaneLayouts@, @depthPitch@ /must/ be 0 if+-- -   #VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-depthPitch-02269#+--     For each element of @pPlaneLayouts@, @depthPitch@ /must/ be 0 if --     'Vulkan.Core10.Image.ImageCreateInfo'::@extent.depth@ is 1 -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT' ----- -   If @drmFormatModifierPlaneCount@ is not @0@, @pPlaneLayouts@ /must/+-- -   #VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-pPlaneLayouts-parameter#+--     If @drmFormatModifierPlaneCount@ is not @0@, @pPlaneLayouts@ /must/ --     be a valid pointer to an array of @drmFormatModifierPlaneCount@ --     'Vulkan.Core10.Image.SubresourceLayout' structures --
src/Vulkan/Extensions/VK_EXT_image_robustness.hs view
@@ -50,8 +50,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceImageRobustnessFeaturesEXT = PhysicalDeviceImageRobustnessFeaturesEXT-  { -- | @robustImageAccess@ indicates whether image accesses are tightly-    -- bounds-checked against the dimensions of the image view.+  { -- | #features-robustImageAccess# @robustImageAccess@ indicates whether image+    -- accesses are tightly bounds-checked against the dimensions of the image+    -- view.     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-input-validation Invalid texels>     -- resulting from out of bounds image loads will be replaced as described     -- in
src/Vulkan/Extensions/VK_EXT_index_type_uint8.hs view
@@ -53,7 +53,7 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceIndexTypeUint8FeaturesEXT = PhysicalDeviceIndexTypeUint8FeaturesEXT-  { -- | @indexTypeUint8@ indicates that+  { -- | #features-indexTypeUint8# @indexTypeUint8@ indicates that     -- 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT8_EXT' can be used with     -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.     indexTypeUint8 :: Bool }
src/Vulkan/Extensions/VK_EXT_inline_uniform_block.hs view
@@ -60,12 +60,14 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeaturesEXT-  { -- | @inlineUniformBlock@ indicates whether the implementation supports-    -- inline uniform block descriptors. If this feature is not enabled,+  { -- | #features-inlineUniformBlock# @inlineUniformBlock@ indicates whether the+    -- implementation supports inline uniform block descriptors. If this+    -- feature is not enabled,     -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT'     -- /must/ not be used.     inlineUniformBlock :: Bool-  , -- | @descriptorBindingInlineUniformBlockUpdateAfterBind@ indicates whether+  , -- | #features-descriptorBindingInlineUniformBlockUpdateAfterBind#+    -- @descriptorBindingInlineUniformBlockUpdateAfterBind@ indicates whether     -- the implementation supports updating inline uniform block descriptors     -- after a set is bound. If this feature is not enabled,     -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'@@ -137,19 +139,22 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockPropertiesEXT-  { -- | @maxInlineUniformBlockSize@ is the maximum size in bytes of an+  { -- | #limits-maxInlineUniformBlockSize# @maxInlineUniformBlockSize@ is the+    -- maximum size in bytes of an     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-inlineuniformblock inline uniform block>     -- binding.     maxInlineUniformBlockSize :: Word32   , -- No documentation found for Nested "VkPhysicalDeviceInlineUniformBlockPropertiesEXT" "maxPerStageDescriptorInlineUniformBlocks"     maxPerStageDescriptorInlineUniformBlocks :: Word32-  , -- | @maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks@ is similar to+  , -- | #limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks#+    -- @maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks@ is similar to     -- @maxPerStageDescriptorInlineUniformBlocks@ but counts descriptor     -- bindings from descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set.     maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks :: Word32-  , -- | @maxDescriptorSetInlineUniformBlocks@ is the maximum number of inline+  , -- | #limits-maxDescriptorSetInlineUniformBlocks#+    -- @maxDescriptorSetInlineUniformBlocks@ is the maximum number of inline     -- uniform block bindings that /can/ be included in descriptor bindings in     -- a pipeline layout across all pipeline shader stages and descriptor set     -- numbers. Descriptor bindings with a descriptor type of@@ -159,7 +164,8 @@     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'     -- bit set count against this limit.     maxDescriptorSetInlineUniformBlocks :: Word32-  , -- | @maxDescriptorSetUpdateAfterBindInlineUniformBlocks@ is similar to+  , -- | #limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks#+    -- @maxDescriptorSetUpdateAfterBindInlineUniformBlocks@ is similar to     -- @maxDescriptorSetInlineUniformBlocks@ but counts descriptor bindings     -- from descriptor sets created with or without the     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'@@ -232,14 +238,17 @@   { -- | @dataSize@ is the number of bytes of inline uniform block data pointed     -- to by @pData@.     --+    -- #VUID-VkWriteDescriptorSetInlineUniformBlockEXT-dataSize-02222#     -- @dataSize@ /must/ be an integer multiple of @4@     --+    -- #VUID-VkWriteDescriptorSetInlineUniformBlockEXT-dataSize-arraylength#     -- @dataSize@ /must/ be greater than @0@     dataSize :: Word32   , -- | @pData@ is a pointer to @dataSize@ number of bytes of data to write to     -- the inline uniform block.     ---    -- @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes+    -- #VUID-VkWriteDescriptorSetInlineUniformBlockEXT-pData-parameter# @pData@+    -- /must/ be a valid pointer to an array of @dataSize@ bytes     data' :: Ptr ()   }   deriving (Typeable)
src/Vulkan/Extensions/VK_EXT_line_rasterization.hs view
@@ -78,17 +78,21 @@ -- -- == Valid Usage ----- -   @lineStippleFactor@ /must/ be in the range [1,256]+-- -   #VUID-vkCmdSetLineStippleEXT-lineStippleFactor-02776#+--     @lineStippleFactor@ /must/ be in the range [1,256] -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetLineStippleEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetLineStippleEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetLineStippleEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -158,27 +162,33 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceLineRasterizationFeaturesEXT = PhysicalDeviceLineRasterizationFeaturesEXT-  { -- | @rectangularLines@ indicates whether the implementation supports+  { -- | #features-rectangularLines# @rectangularLines@ indicates whether the+    -- implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines rectangular line rasterization>.     rectangularLines :: Bool-  , -- | @bresenhamLines@ indicates whether the implementation supports+  , -- | #features-bresenhamLines# @bresenhamLines@ indicates whether the+    -- implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-bresenham Bresenham-style line rasterization>.     bresenhamLines :: Bool-  , -- | @smoothLines@ indicates whether the implementation supports+  , -- | #features-smoothLines# @smoothLines@ indicates whether the+    -- implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-smooth smooth line rasterization>.     smoothLines :: Bool-  , -- | @stippledRectangularLines@ indicates whether the implementation supports+  , -- | #features-stippledRectangularLines# @stippledRectangularLines@ indicates+    -- whether the implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>     -- with 'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT' lines, or with     -- 'LINE_RASTERIZATION_MODE_DEFAULT_EXT' lines if     -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@strictLines@     -- is 'Vulkan.Core10.FundamentalTypes.TRUE'.     stippledRectangularLines :: Bool-  , -- | @stippledBresenhamLines@ indicates whether the implementation supports+  , -- | #features-stippledBresenhamLines# @stippledBresenhamLines@ indicates+    -- whether the implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>     -- with 'LINE_RASTERIZATION_MODE_BRESENHAM_EXT' lines.     stippledBresenhamLines :: Bool-  , -- | @stippledSmoothLines@ indicates whether the implementation supports+  , -- | #features-stippledSmoothLines# @stippledSmoothLines@ indicates whether+    -- the implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines-stipple stippled line rasterization>     -- with 'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT' lines.     stippledSmoothLines :: Bool@@ -262,8 +272,9 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceLineRasterizationPropertiesEXT = PhysicalDeviceLineRasterizationPropertiesEXT-  { -- | @lineSubPixelPrecisionBits@ is the number of bits of subpixel precision-    -- in framebuffer coordinates xf and yf when rasterizing+  { -- | #limits-lineSubPixelPrecisionBits# @lineSubPixelPrecisionBits@ is the+    -- number of bits of subpixel precision in framebuffer coordinates xf and+    -- yf when rasterizing     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-lines line segments>.     lineSubPixelPrecisionBits :: Word32 }   deriving (Typeable, Eq)@@ -309,40 +320,47 @@ -- -- == Valid Usage ----- -   If @lineRasterizationMode@ is+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02768#+--     If @lineRasterizationMode@ is --     'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT', then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rectangularLines rectangularLines> --     feature /must/ be enabled ----- -   If @lineRasterizationMode@ is+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02769#+--     If @lineRasterizationMode@ is --     'LINE_RASTERIZATION_MODE_BRESENHAM_EXT', then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bresenhamLines bresenhamLines> --     feature /must/ be enabled ----- -   If @lineRasterizationMode@ is+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-02770#+--     If @lineRasterizationMode@ is --     'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT', then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bresenhamLines smoothLines> --     feature /must/ be enabled ----- -   If @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02771#+--     If @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and --     @lineRasterizationMode@ is --     'LINE_RASTERIZATION_MODE_RECTANGULAR_EXT', then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines> --     feature /must/ be enabled ----- -   If @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02772#+--     If @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and --     @lineRasterizationMode@ is 'LINE_RASTERIZATION_MODE_BRESENHAM_EXT', --     then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines> --     feature /must/ be enabled ----- -   If @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02773#+--     If @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and --     @lineRasterizationMode@ is --     'LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT', then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines> --     feature /must/ be enabled ----- -   If @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-stippledLineEnable-02774#+--     If @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and --     @lineRasterizationMode@ is 'LINE_RASTERIZATION_MODE_DEFAULT_EXT', --     then the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>@@ -352,10 +370,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT' ----- -   @lineRasterizationMode@ /must/ be a valid 'LineRasterizationModeEXT'+-- -   #VUID-VkPipelineRasterizationLineStateCreateInfoEXT-lineRasterizationMode-parameter#+--     @lineRasterizationMode@ /must/ be a valid 'LineRasterizationModeEXT' --     value -- -- = See Also
src/Vulkan/Extensions/VK_EXT_memory_priority.hs view
@@ -57,9 +57,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceMemoryPriorityFeaturesEXT = PhysicalDeviceMemoryPriorityFeaturesEXT-  { -- | @memoryPriority@ indicates that the implementation supports memory-    -- priorities specified at memory allocation time via-    -- 'MemoryPriorityAllocateInfoEXT'.+  { -- | #features-memoryPriority# @memoryPriority@ indicates that the+    -- implementation supports memory priorities specified at memory allocation+    -- time via 'MemoryPriorityAllocateInfoEXT'.     memoryPriority :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -120,7 +120,8 @@     -- values are higher priority. The granularity of the priorities is     -- implementation-dependent.     ---    -- @priority@ /must/ be between @0@ and @1@, inclusive+    -- #VUID-VkMemoryPriorityAllocateInfoEXT-priority-02602# @priority@ /must/+    -- be between @0@ and @1@, inclusive     priority :: Float }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_EXT_metal_surface.hs view
@@ -82,17 +82,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateMetalSurfaceEXT-instance-parameter# @instance@ /must/+--     be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'MetalSurfaceCreateInfoEXT' structure+-- -   #VUID-vkCreateMetalSurfaceEXT-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'MetalSurfaceCreateInfoEXT'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateMetalSurfaceEXT-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSurface@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.SurfaceKHR' handle+-- -   #VUID-vkCreateMetalSurfaceEXT-pSurface-parameter# @pSurface@ /must/+--     be a valid pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'+--     handle -- -- == Return Codes --@@ -154,7 +157,8 @@ data MetalSurfaceCreateInfoEXT = MetalSurfaceCreateInfoEXT   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkMetalSurfaceCreateInfoEXT-flags-zerobitmask# @flags@ /must/ be+    -- @0@     flags :: MetalSurfaceCreateFlagsEXT   , -- | @pLayer@ is a reference to a 'CAMetalLayer' object representing a     -- renderable surface.
src/Vulkan/Extensions/VK_EXT_pipeline_creation_cache_control.hs view
@@ -61,8 +61,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeaturesEXT-  { -- | @pipelineCreationCacheControl@ indicates that the implementation-    -- supports:+  { -- | #features-pipelineCreationCacheControl# @pipelineCreationCacheControl@+    -- indicates that the implementation supports:     --     -- -   The following /can/ be used in @Vk*PipelineCreateInfo@::@flags@:     --
src/Vulkan/Extensions/VK_EXT_pipeline_creation_feedback.hs view
@@ -141,22 +141,26 @@ -- -- == Valid Usage ----- -   When chained to 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',+-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02668#+--     When chained to 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', --     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@ --     /must/ equal --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@ ----- -   When chained to 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',+-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02669#+--     When chained to 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo', --     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@ --     /must/ equal 1 ----- -   When chained to+-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02670#+--     When chained to --     'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR', --     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@ --     /must/ equal --     'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingPipelineCreateInfoKHR'::@stageCount@ ----- -   When chained to+-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02969#+--     When chained to --     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV', --     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@ --     /must/ equal@@ -164,17 +168,21 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT' ----- -   @pPipelineCreationFeedback@ /must/ be a valid pointer to a+-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pPipelineCreationFeedback-parameter#+--     @pPipelineCreationFeedback@ /must/ be a valid pointer to a --     'PipelineCreationFeedbackEXT' structure ----- -   @pPipelineStageCreationFeedbacks@ /must/ be a valid pointer to an+-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pPipelineStageCreationFeedbacks-parameter#+--     @pPipelineStageCreationFeedbacks@ /must/ be a valid pointer to an --     array of @pipelineStageCreationFeedbackCount@ --     'PipelineCreationFeedbackEXT' structures ----- -   @pipelineStageCreationFeedbackCount@ /must/ be greater than @0@+-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-arraylength#+--     @pipelineStageCreationFeedbackCount@ /must/ be greater than @0@ -- -- = See Also --
src/Vulkan/Extensions/VK_EXT_private_data.hs view
@@ -100,22 +100,26 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCreatePrivateDataSlotEXT-privateData-04564# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-privateData privateData> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreatePrivateDataSlotEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreatePrivateDataSlotEXT-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'PrivateDataSlotCreateInfoEXT' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreatePrivateDataSlotEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pPrivateDataSlot@ /must/ be a valid pointer to a+-- -   #VUID-vkCreatePrivateDataSlotEXT-pPrivateDataSlot-parameter#+--     @pPrivateDataSlot@ /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle -- -- == Return Codes@@ -185,27 +189,33 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-04062# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @privateDataSlot@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-04063# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @privateDataSlot@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyPrivateDataSlotEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @privateDataSlot@ is not---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @privateDataSlot@ /must/---     be a valid 'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle+-- -   #VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-parameter# If+--     @privateDataSlot@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+--     @privateDataSlot@ /must/ be a valid+--     'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroyPrivateDataSlotEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @privateDataSlot@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkDestroyPrivateDataSlotEXT-privateDataSlot-parent# If+--     @privateDataSlot@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -269,30 +279,32 @@                    . (MonadIO io)                   => -- | @device@ is the device that created the object.                      ---                     -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                     -- #VUID-vkSetPrivateDataEXT-device-parameter# @device@ /must/ be a valid+                     -- 'Vulkan.Core10.Handles.Device' handle                      Device                   -> -- | @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType' specifying                      -- the type of object to associate data with.                      ---                     -- @objectType@ /must/ be a valid-                     -- 'Vulkan.Core10.Enums.ObjectType.ObjectType' value+                     -- #VUID-vkSetPrivateDataEXT-objectType-parameter# @objectType@ /must/ be a+                     -- valid 'Vulkan.Core10.Enums.ObjectType.ObjectType' value                      ObjectType                   -> -- | @objectHandle@ is a handle to the object to associate data with.                      ---                     -- @objectHandle@ /must/ be @device@ or a child of @device@+                     -- #VUID-vkSetPrivateDataEXT-objectHandle-04016# @objectHandle@ /must/ be+                     -- @device@ or a child of @device@                      ---                     -- @objectHandle@ /must/ be a valid handle to an object of type-                     -- @objectType@+                     -- #VUID-vkSetPrivateDataEXT-objectHandle-04017# @objectHandle@ /must/ be a+                     -- valid handle to an object of type @objectType@                      ("objectHandle" ::: Word64)                   -> -- | @privateDataSlot@ is a handle to a                      -- 'Vulkan.Extensions.Handles.PrivateDataSlotEXT' specifying location of                      -- private data storage.                      ---                     -- @privateDataSlot@ /must/ be a valid-                     -- 'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle+                     -- #VUID-vkSetPrivateDataEXT-privateDataSlot-parameter# @privateDataSlot@+                     -- /must/ be a valid 'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle                      ---                     -- @privateDataSlot@ /must/ have been created, allocated, or retrieved from-                     -- @device@+                     -- #VUID-vkSetPrivateDataEXT-privateDataSlot-parent# @privateDataSlot@+                     -- /must/ have been created, allocated, or retrieved from @device@                      PrivateDataSlotEXT                   -> -- | @data@ is user defined data to associate the object with. This data will                      -- be stored at @privateDataSlot@.@@ -338,16 +350,18 @@                    . (MonadIO io)                   => -- | @device@ is the device that created the object                      ---                     -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                     -- #VUID-vkGetPrivateDataEXT-device-parameter# @device@ /must/ be a valid+                     -- 'Vulkan.Core10.Handles.Device' handle                      Device                   -> -- | @objectType@ is a 'Vulkan.Core10.Enums.ObjectType.ObjectType' specifying                      -- the type of object data is associated with.                      ---                     -- @objectType@ /must/ be 'Vulkan.Core10.Handles.Device' or an object type-                     -- whose parent is 'Vulkan.Core10.Handles.Device'+                     -- #VUID-vkGetPrivateDataEXT-objectType-04018# @objectType@ /must/ be+                     -- 'Vulkan.Core10.Handles.Device' or an object type whose parent is+                     -- 'Vulkan.Core10.Handles.Device'                      ---                     -- @objectType@ /must/ be a valid-                     -- 'Vulkan.Core10.Enums.ObjectType.ObjectType' value+                     -- #VUID-vkGetPrivateDataEXT-objectType-parameter# @objectType@ /must/ be a+                     -- valid 'Vulkan.Core10.Enums.ObjectType.ObjectType' value                      ObjectType                   -> -- | @objectHandle@ is a handle to the object data is associated with.                      ("objectHandle" ::: Word64)@@ -355,11 +369,11 @@                      -- 'Vulkan.Extensions.Handles.PrivateDataSlotEXT' specifying location of                      -- private data pointer storage.                      ---                     -- @privateDataSlot@ /must/ be a valid-                     -- 'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle+                     -- #VUID-vkGetPrivateDataEXT-privateDataSlot-parameter# @privateDataSlot@+                     -- /must/ be a valid 'Vulkan.Extensions.Handles.PrivateDataSlotEXT' handle                      ---                     -- @privateDataSlot@ /must/ have been created, allocated, or retrieved from-                     -- @device@+                     -- #VUID-vkGetPrivateDataEXT-privateDataSlot-parent# @privateDataSlot@+                     -- /must/ have been created, allocated, or retrieved from @device@                      PrivateDataSlotEXT                   -> io (("data" ::: Word64)) getPrivateDataEXT device objectType objectHandle privateDataSlot = liftIO . evalContT $ do@@ -435,7 +449,8 @@   { -- | @flags@ is a bitmask of 'PrivateDataSlotCreateFlagsEXT' specifying     -- additional parameters of the new private data slot     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkPrivateDataSlotCreateInfoEXT-flags-zerobitmask# @flags@ /must/+    -- be @0@     flags :: PrivateDataSlotCreateFlagsEXT }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -499,8 +514,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevicePrivateDataFeaturesEXT = PhysicalDevicePrivateDataFeaturesEXT-  { -- | @privateData@ indicates whether the implementation supports private-    -- data. See+  { -- | #features-privateData# @privateData@ indicates whether the+    -- implementation supports private data. See     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#private-data Private Data>.     privateData :: Bool }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_EXT_robustness2.hs view
@@ -41,10 +41,11 @@ -- -- = Description ----- -   @robustBufferAccess2@ indicates whether buffer accesses are tightly---     bounds-checked against the range of the descriptor. Uniform buffers---     /must/ be bounds-checked to the range of the descriptor, where the---     range is rounded up to a multiple of+-- -   #features-robustBufferAccess2# @robustBufferAccess2@ indicates+--     whether buffer accesses are tightly bounds-checked against the range+--     of the descriptor. Uniform buffers /must/ be bounds-checked to the+--     range of the descriptor, where the range is rounded up to a multiple+--     of --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-robustUniformBufferAccessSizeAlignment robustUniformBufferAccessSizeAlignment>. --     Storage buffers /must/ be bounds-checked to the range of the --     descriptor, where the range is rounded up to a multiple of@@ -53,16 +54,18 @@ --     loads will have (0,0,1) values inserted for missing G, B, or A --     components based on the format. ----- -   @robustImageAccess2@ indicates whether image accesses are tightly---     bounds-checked against the dimensions of the image view. Out of---     bounds image loads will return zero values, with (0,0,1) values+-- -   #features-robustImageAccess2# @robustImageAccess2@ indicates whether+--     image accesses are tightly bounds-checked against the dimensions of+--     the image view. Out of bounds image loads will return zero values,+--     with (0,0,1) values --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-conversion-to-rgba inserted for missing G, B, or A components> --     based on the format. ----- -   @nullDescriptor@ indicates whether descriptors /can/ be written with---     a 'Vulkan.Core10.APIConstants.NULL_HANDLE' resource or view, which---     are considered valid to access and act as if the descriptor were---     bound to nothing.+-- -   #features-nullDescriptor# @nullDescriptor@ indicates whether+--     descriptors /can/ be written with a+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' resource or view, which are+--     considered valid to access and act as if the descriptor were bound+--     to nothing. -- -- If the 'PhysicalDeviceRobustness2FeaturesEXT' structure is included in -- the @pNext@ chain of@@ -71,13 +74,15 @@ -- -- == Valid Usage ----- -   If @robustBufferAccess2@ is enabled then+-- -   #VUID-VkPhysicalDeviceRobustness2FeaturesEXT-robustBufferAccess2-04000#+--     If @robustBufferAccess2@ is enabled then --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess> --     /must/ also be enabled -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceRobustness2FeaturesEXT-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT' -- -- = See Also@@ -160,13 +165,15 @@ -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceRobustness2PropertiesEXT = PhysicalDeviceRobustness2PropertiesEXT-  { -- | @robustStorageBufferAccessSizeAlignment@ is the number of bytes that the+  { -- | #limits-robustStorageBufferAccessSizeAlignment#+    -- @robustStorageBufferAccessSizeAlignment@ is the number of bytes that the     -- range of a storage buffer descriptor is rounded up to when used for     -- bounds-checking when     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>     -- is enabled. This value is either 1 or 4.     robustStorageBufferAccessSizeAlignment :: DeviceSize-  , -- | @robustUniformBufferAccessSizeAlignment@ is the number of bytes that the+  , -- | #limits-robustUniformBufferAccessSizeAlignment#+    -- @robustUniformBufferAccessSizeAlignment@ is the number of bytes that the     -- range of a uniform buffer descriptor is rounded up to when used for     -- bounds-checking when     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
src/Vulkan/Extensions/VK_EXT_sample_locations.hs view
@@ -86,12 +86,13 @@ -- -- == Valid Usage ----- -   The @sampleLocationsPerPixel@ member of @pSampleLocationsInfo@---     /must/ equal the @rasterizationSamples@ member of the+-- -   #VUID-vkCmdSetSampleLocationsEXT-sampleLocationsPerPixel-01529# The+--     @sampleLocationsPerPixel@ member of @pSampleLocationsInfo@ /must/+--     equal the @rasterizationSamples@ member of the --     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo' --     structure the bound graphics pipeline has been created with ----- -   If+-- -   #VUID-vkCmdSetSampleLocationsEXT-variableSampleLocations-01530# If --     'PhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@ --     is 'Vulkan.Core10.FundamentalTypes.FALSE' then the current render --     pass /must/ have been begun by specifying a@@ -103,16 +104,20 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetSampleLocationsEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pSampleLocationsInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdSetSampleLocationsEXT-pSampleLocationsInfo-parameter#+--     @pSampleLocationsInfo@ /must/ be a valid pointer to a valid --     'SampleLocationsInfoEXT' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetSampleLocationsEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetSampleLocationsEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -175,11 +180,13 @@                                           => -- | @physicalDevice@ is the physical device from which to query the                                              -- additional multisampling capabilities.                                              --+                                             -- #VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter#                                              -- @physicalDevice@ /must/ be a valid                                              -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                              PhysicalDevice                                           -> -- | @samples@ is the sample count to query the capabilities for.                                              --+                                             -- #VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-samples-parameter#                                              -- @samples@ /must/ be a valid                                              -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value                                              ("samples" ::: SampleCountFlagBits)@@ -282,22 +289,26 @@ -- -- == Valid Usage ----- -   @sampleLocationsPerPixel@ /must/ be a bit value that is set in+-- -   #VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-01526#+--     @sampleLocationsPerPixel@ /must/ be a bit value that is set in --     'PhysicalDeviceSampleLocationsPropertiesEXT'::@sampleLocationSampleCounts@ ----- -   @sampleLocationsCount@ /must/ equal @sampleLocationsPerPixel@ ×+-- -   #VUID-VkSampleLocationsInfoEXT-sampleLocationsCount-01527#+--     @sampleLocationsCount@ /must/ equal @sampleLocationsPerPixel@ × --     @sampleLocationGridSize.width@ × @sampleLocationGridSize.height@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSampleLocationsInfoEXT-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT' ----- -   If @sampleLocationsPerPixel@ is not @0@, @sampleLocationsPerPixel@+-- -   #VUID-VkSampleLocationsInfoEXT-sampleLocationsPerPixel-parameter# If+--     @sampleLocationsPerPixel@ is not @0@, @sampleLocationsPerPixel@ --     /must/ be a valid --     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value ----- -   If @sampleLocationsCount@ is not @0@, @pSampleLocations@ /must/ be a+-- -   #VUID-VkSampleLocationsInfoEXT-pSampleLocations-parameter# If+--     @sampleLocationsCount@ is not @0@, @pSampleLocations@ /must/ be a --     valid pointer to an array of @sampleLocationsCount@ --     'SampleLocationEXT' structures --@@ -386,6 +397,7 @@   { -- | @attachmentIndex@ is the index of the attachment for which the sample     -- locations state is provided.     --+    -- #VUID-VkAttachmentSampleLocationsEXT-attachmentIndex-01531#     -- @attachmentIndex@ /must/ be less than the @attachmentCount@ specified in     -- 'Vulkan.Core10.Pass.RenderPassCreateInfo' the render pass specified by     -- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderPass@@@ -396,6 +408,7 @@     -- attachment to the image layout specified for the attachment in the first     -- subpass using it.     --+    -- #VUID-VkAttachmentSampleLocationsEXT-sampleLocationsInfo-parameter#     -- @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'     -- structure     sampleLocationsInfo :: SampleLocationsInfoEXT@@ -455,7 +468,8 @@   { -- | @subpassIndex@ is the index of the subpass for which the sample     -- locations state is provided.     ---    -- @subpassIndex@ /must/ be less than the @subpassCount@ specified in+    -- #VUID-VkSubpassSampleLocationsEXT-subpassIndex-01532# @subpassIndex@+    -- /must/ be less than the @subpassCount@ specified in     -- 'Vulkan.Core10.Pass.RenderPassCreateInfo' the render pass specified by     -- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo'::@renderPass@     -- was created with@@ -465,6 +479,7 @@     -- layout the attachment is used with in the subpass specified in     -- @subpassIndex@.     --+    -- #VUID-VkSubpassSampleLocationsEXT-sampleLocationsInfo-parameter#     -- @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'     -- structure     sampleLocationsInfo :: SampleLocationsInfoEXT@@ -507,15 +522,18 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRenderPassSampleLocationsBeginInfoEXT-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT' ----- -   If @attachmentInitialSampleLocationsCount@ is not @0@,+-- -   #VUID-VkRenderPassSampleLocationsBeginInfoEXT-pAttachmentInitialSampleLocations-parameter#+--     If @attachmentInitialSampleLocationsCount@ is not @0@, --     @pAttachmentInitialSampleLocations@ /must/ be a valid pointer to an --     array of @attachmentInitialSampleLocationsCount@ valid --     'AttachmentSampleLocationsEXT' structures ----- -   If @postSubpassSampleLocationsCount@ is not @0@,+-- -   #VUID-VkRenderPassSampleLocationsBeginInfoEXT-pPostSubpassSampleLocations-parameter#+--     If @postSubpassSampleLocationsCount@ is not @0@, --     @pPostSubpassSampleLocations@ /must/ be a valid pointer to an array --     of @postSubpassSampleLocationsCount@ valid --     'SubpassSampleLocationsEXT' structures@@ -626,6 +644,7 @@     -- created with     -- 'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'.     --+    -- #VUID-VkPipelineSampleLocationsStateCreateInfoEXT-sampleLocationsInfo-parameter#     -- @sampleLocationsInfo@ /must/ be a valid 'SampleLocationsInfoEXT'     -- structure     sampleLocationsInfo :: SampleLocationsInfoEXT@@ -690,26 +709,28 @@ -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceSampleLocationsPropertiesEXT = PhysicalDeviceSampleLocationsPropertiesEXT-  { -- | @sampleLocationSampleCounts@ is a bitmask of-    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' indicating-    -- the sample counts supporting custom sample locations.+  { -- | #limits-sampleLocationSampleCounts# @sampleLocationSampleCounts@ is a+    -- bitmask of 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits'+    -- indicating the sample counts supporting custom sample locations.     sampleLocationSampleCounts :: SampleCountFlags-  , -- | @maxSampleLocationGridSize@ is the maximum size of the pixel grid in-    -- which sample locations /can/ vary that is supported for all sample-    -- counts in @sampleLocationSampleCounts@.+  , -- | #limits-maxSampleLocationGridSize# @maxSampleLocationGridSize@ is the+    -- maximum size of the pixel grid in which sample locations /can/ vary that+    -- is supported for all sample counts in @sampleLocationSampleCounts@.     maxSampleLocationGridSize :: Extent2D-  , -- | @sampleLocationCoordinateRange@[2] is the range of supported sample+  , -- | #limits-sampleLocationCoordinateRange#+    -- @sampleLocationCoordinateRange@[2] is the range of supported sample     -- location coordinates.     sampleLocationCoordinateRange :: (Float, Float)-  , -- | @sampleLocationSubPixelBits@ is the number of bits of subpixel precision-    -- for sample locations.+  , -- | #limits-sampleLocationSubPixelBits# @sampleLocationSubPixelBits@ is the+    -- number of bits of subpixel precision for sample locations.     sampleLocationSubPixelBits :: Word32-  , -- | @variableSampleLocations@ specifies whether the sample locations used by-    -- all pipelines that will be bound to a command buffer during a subpass-    -- /must/ match. If set to 'Vulkan.Core10.FundamentalTypes.TRUE', the-    -- implementation supports variable sample locations in a subpass. If set-    -- to 'Vulkan.Core10.FundamentalTypes.FALSE', then the sample locations-    -- /must/ stay constant in each subpass.+  , -- | #limits-variableSampleLocations# @variableSampleLocations@ specifies+    -- whether the sample locations used by all pipelines that will be bound to+    -- a command buffer during a subpass /must/ match. If set to+    -- 'Vulkan.Core10.FundamentalTypes.TRUE', the implementation supports+    -- variable sample locations in a subpass. If set to+    -- 'Vulkan.Core10.FundamentalTypes.FALSE', then the sample locations /must/+    -- stay constant in each subpass.     variableSampleLocations :: Bool   }   deriving (Typeable)
src/Vulkan/Extensions/VK_EXT_shader_atomic_float.hs view
@@ -38,46 +38,53 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderAtomicFloatFeaturesEXT = PhysicalDeviceShaderAtomicFloatFeaturesEXT-  { -- | @shaderBufferFloat32Atomics@ indicates whether shaders /can/ perform-    -- 32-bit floating-point load, store and exchange atomic operations on-    -- storage buffers.+  { -- | #features-shaderBufferFloat32Atomics# @shaderBufferFloat32Atomics@+    -- indicates whether shaders /can/ perform 32-bit floating-point load,+    -- store and exchange atomic operations on storage buffers.     shaderBufferFloat32Atomics :: Bool-  , -- | @shaderBufferFloat32AtomicAdd@ indicates whether shaders /can/ perform-    -- 32-bit floating-point add atomic operations on storage buffers.+  , -- | #features-shaderBufferFloat32AtomicAdd# @shaderBufferFloat32AtomicAdd@+    -- indicates whether shaders /can/ perform 32-bit floating-point add atomic+    -- operations on storage buffers.     shaderBufferFloat32AtomicAdd :: Bool-  , -- | @shaderBufferFloat64Atomics@ indicates whether shaders /can/ perform-    -- 64-bit floating-point load, store and exchange atomic operations on-    -- storage buffers.+  , -- | #features-shaderBufferFloat64Atomics# @shaderBufferFloat64Atomics@+    -- indicates whether shaders /can/ perform 64-bit floating-point load,+    -- store and exchange atomic operations on storage buffers.     shaderBufferFloat64Atomics :: Bool-  , -- | @shaderBufferFloat64AtomicAdd@ indicates whether shaders /can/ perform-    -- 64-bit floating-point add atomic operations on storage buffers.+  , -- | #features-shaderBufferFloat64AtomicAdd# @shaderBufferFloat64AtomicAdd@+    -- indicates whether shaders /can/ perform 64-bit floating-point add atomic+    -- operations on storage buffers.     shaderBufferFloat64AtomicAdd :: Bool-  , -- | @shaderSharedFloat32Atomics@ indicates whether shaders /can/ perform-    -- 32-bit floating-point load, store and exchange atomic operations on-    -- shared memory.+  , -- | #features-shaderSharedFloat32Atomics# @shaderSharedFloat32Atomics@+    -- indicates whether shaders /can/ perform 32-bit floating-point load,+    -- store and exchange atomic operations on shared memory.     shaderSharedFloat32Atomics :: Bool-  , -- | @shaderSharedFloat32AtomicAdd@ indicates whether shaders /can/ perform-    -- 32-bit floating-point add atomic operations on shared memory.+  , -- | #features-shaderSharedFloat32AtomicAdd# @shaderSharedFloat32AtomicAdd@+    -- indicates whether shaders /can/ perform 32-bit floating-point add atomic+    -- operations on shared memory.     shaderSharedFloat32AtomicAdd :: Bool-  , -- | @shaderSharedFloat64Atomics@ indicates whether shaders /can/ perform-    -- 64-bit floating-point load, store and exchange atomic operations on-    -- shared memory.+  , -- | #features-shaderSharedFloat64Atomics# @shaderSharedFloat64Atomics@+    -- indicates whether shaders /can/ perform 64-bit floating-point load,+    -- store and exchange atomic operations on shared memory.     shaderSharedFloat64Atomics :: Bool-  , -- | @shaderSharedFloat64AtomicAdd@ indicates whether shaders /can/ perform-    -- 64-bit floating-point add atomic operations on shared memory.+  , -- | #features-shaderSharedFloat64AtomicAdd# @shaderSharedFloat64AtomicAdd@+    -- indicates whether shaders /can/ perform 64-bit floating-point add atomic+    -- operations on shared memory.     shaderSharedFloat64AtomicAdd :: Bool-  , -- | @shaderImageFloat32Atomics@ indicates whether shaders /can/ perform-    -- 32-bit floating-point load, store and exchange atomic image operations.+  , -- | #features-shaderImageFloat32Atomics# @shaderImageFloat32Atomics@+    -- indicates whether shaders /can/ perform 32-bit floating-point load,+    -- store and exchange atomic image operations.     shaderImageFloat32Atomics :: Bool-  , -- | @shaderImageFloat32AtomicAdd@ indicates whether shaders /can/ perform-    -- 32-bit floating-point add atomic image operations.+  , -- | #features-shaderImageFloat32AtomicAdd# @shaderImageFloat32AtomicAdd@+    -- indicates whether shaders /can/ perform 32-bit floating-point add atomic+    -- image operations.     shaderImageFloat32AtomicAdd :: Bool-  , -- | @sparseImageFloat32Atomics@ indicates whether 32-bit floating-point-    -- load, store and exchange atomic operations /can/ be used on sparse-    -- images.+  , -- | #features-sparseImageFloat32Atomics# @sparseImageFloat32Atomics@+    -- indicates whether 32-bit floating-point load, store and exchange atomic+    -- operations /can/ be used on sparse images.     sparseImageFloat32Atomics :: Bool-  , -- | @sparseImageFloat32AtomicAdd@ indicates whether 32-bit floating-point-    -- add atomic operations /can/ be used on sparse images.+  , -- | #features-sparseImageFloat32AtomicAdd# @sparseImageFloat32AtomicAdd@+    -- indicates whether 32-bit floating-point add atomic operations /can/ be+    -- used on sparse images.     sparseImageFloat32AtomicAdd :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_EXT_shader_demote_to_helper_invocation.hs view
@@ -55,7 +55,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT-  { -- | @shaderDemoteToHelperInvocation@ indicates whether the implementation+  { -- | #features-shaderDemoteToHelperInvocation#+    -- @shaderDemoteToHelperInvocation@ indicates whether the implementation     -- supports the SPIR-V @DemoteToHelperInvocationEXT@ capability.     shaderDemoteToHelperInvocation :: Bool }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_EXT_shader_image_atomic_int64.hs view
@@ -38,11 +38,12 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = PhysicalDeviceShaderImageAtomicInt64FeaturesEXT-  { -- | @shaderImageInt64Atomics@ indicates whether shaders /can/ support 64-bit-    -- unsigned and signed integer atomic operations on images.+  { -- | #features-shaderImageInt64Atomics# @shaderImageInt64Atomics@ indicates+    -- whether shaders /can/ support 64-bit unsigned and signed integer atomic+    -- operations on images.     shaderImageInt64Atomics :: Bool-  , -- | @sparseImageInt64Atomics@ indicates whether 64-bit integer atomics /can/-    -- be used on sparse images.+  , -- | #features-sparseImageInt64Atomics# @sparseImageInt64Atomics@ indicates+    -- whether 64-bit integer atomics /can/ be used on sparse images.     sparseImageInt64Atomics :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_EXT_subgroup_size_control.hs view
@@ -77,14 +77,15 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeaturesEXT-  { -- | @subgroupSizeControl@ indicates whether the implementation supports-    -- controlling shader subgroup sizes via the+  { -- | #features-subgroupSizeControl# @subgroupSizeControl@ indicates whether+    -- the implementation supports controlling shader subgroup sizes via the     -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT'     -- flag and the 'PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT'     -- structure.     subgroupSizeControl :: Bool-  , -- | @computeFullSubgroups@ indicates whether the implementation supports-    -- requiring full subgroups in compute shaders via the+  , -- | #features-computeFullSubgroups# @computeFullSubgroups@ indicates whether+    -- the implementation supports requiring full subgroups in compute shaders+    -- via the     -- 'Vulkan.Core10.Enums.PipelineShaderStageCreateFlagBits.PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT'     -- flag.     computeFullSubgroups :: Bool@@ -159,27 +160,31 @@ -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlPropertiesEXT-  { -- | @minSubgroupSize@ is the minimum subgroup size supported by this device.-    -- @minSubgroupSize@ is at least one if any of the physical device’s queues-    -- support 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+  { -- | #limits-min-subgroup-size# @minSubgroupSize@ is the minimum subgroup+    -- size supported by this device. @minSubgroupSize@ is at least one if any+    -- of the physical device’s queues support+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'. @minSubgroupSize@     -- is a power-of-two. @minSubgroupSize@ is less than or equal to     -- @maxSubgroupSize@. @minSubgroupSize@ is less than or equal to     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>.     minSubgroupSize :: Word32-  , -- | @maxSubgroupSize@ is the maximum subgroup size supported by this device.-    -- @maxSubgroupSize@ is at least one if any of the physical device’s queues-    -- support 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+  , -- | #limits-max-subgroup-size# @maxSubgroupSize@ is the maximum subgroup+    -- size supported by this device. @maxSubgroupSize@ is at least one if any+    -- of the physical device’s queues support+    -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or     -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT'. @maxSubgroupSize@     -- is a power-of-two. @maxSubgroupSize@ is greater than or equal to     -- @minSubgroupSize@. @maxSubgroupSize@ is greater than or equal to     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-subgroup-size subgroupSize>.     maxSubgroupSize :: Word32-  , -- | @maxComputeWorkgroupSubgroups@ is the maximum number of subgroups-    -- supported by the implementation within a workgroup.+  , -- | #limits-max-subgroups-per-workgroup# @maxComputeWorkgroupSubgroups@ is+    -- the maximum number of subgroups supported by the implementation within a+    -- workgroup.     maxComputeWorkgroupSubgroups :: Word32-  , -- | @requiredSubgroupSizeStages@ is a bitfield of what shader stages support-    -- having a required subgroup size specified.+  , -- | #limits-required-subgroup-size-stages# @requiredSubgroupSizeStages@ is a+    -- bitfield of what shader stages support having a required subgroup size+    -- specified.     requiredSubgroupSizeStages :: ShaderStageFlags   }   deriving (Typeable, Eq)@@ -252,11 +257,14 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-  { -- | @requiredSubgroupSize@ /must/ be a power-of-two integer+  { -- | #VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02760#+    -- @requiredSubgroupSize@ /must/ be a power-of-two integer     --+    -- #VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02761#     -- @requiredSubgroupSize@ /must/ be greater or equal to     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-min-subgroup-size minSubgroupSize>     --+    -- #VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02762#     -- @requiredSubgroupSize@ /must/ be less than or equal to     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-max-subgroup-size maxSubgroupSize>     requiredSubgroupSize :: Word32 }
src/Vulkan/Extensions/VK_EXT_texel_buffer_alignment.hs view
@@ -57,9 +57,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceTexelBufferAlignmentFeaturesEXT = PhysicalDeviceTexelBufferAlignmentFeaturesEXT-  { -- | @texelBufferAlignment@ indicates whether the implementation uses more-    -- specific alignment requirements advertised in-    -- 'PhysicalDeviceTexelBufferAlignmentPropertiesEXT' rather than+  { -- | #features-texelBufferAlignment# @texelBufferAlignment@ indicates whether+    -- the implementation uses more specific alignment requirements advertised+    -- in 'PhysicalDeviceTexelBufferAlignmentPropertiesEXT' rather than     -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@minTexelBufferOffsetAlignment@.     texelBufferAlignment :: Bool }   deriving (Typeable, Eq)@@ -140,16 +140,20 @@ -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentPropertiesEXT-  { -- | @storageTexelBufferOffsetAlignmentBytes@ is a byte alignment that is+  { -- | #limits-storageTexelBufferOffsetAlignmentBytes#+    -- @storageTexelBufferOffsetAlignmentBytes@ is a byte alignment that is     -- sufficient for a storage texel buffer of any format.     storageTexelBufferOffsetAlignmentBytes :: DeviceSize-  , -- | @storageTexelBufferOffsetSingleTexelAlignment@ indicates whether single+  , -- | #limits-storageTexelBufferOffsetSingleTexelAlignment#+    -- @storageTexelBufferOffsetSingleTexelAlignment@ indicates whether single     -- texel alignment is sufficient for a storage texel buffer of any format.     storageTexelBufferOffsetSingleTexelAlignment :: Bool-  , -- | @uniformTexelBufferOffsetAlignmentBytes@ is a byte alignment that is+  , -- | #limits-uniformTexelBufferOffsetAlignmentBytes#+    -- @uniformTexelBufferOffsetAlignmentBytes@ is a byte alignment that is     -- sufficient for a uniform texel buffer of any format.     uniformTexelBufferOffsetAlignmentBytes :: DeviceSize-  , -- | @uniformTexelBufferOffsetSingleTexelAlignment@ indicates whether single+  , -- | #limits-uniformTexelBufferOffsetSingleTexelAlignment#+    -- @uniformTexelBufferOffsetSingleTexelAlignment@ indicates whether single     -- texel alignment is sufficient for a uniform texel buffer of any format.     uniformTexelBufferOffsetSingleTexelAlignment :: Bool   }
src/Vulkan/Extensions/VK_EXT_texture_compression_astc_hdr.hs view
@@ -53,9 +53,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT-  { -- | @textureCompressionASTC_HDR@ indicates whether all of the ASTC HDR-    -- compressed texture formats are supported. If this feature is enabled,-    -- then the+  { -- | #features-textureCompressionASTC_HDR# @textureCompressionASTC_HDR@+    -- indicates whether all of the ASTC HDR compressed texture formats are+    -- supported. If this feature is enabled, then the     -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_BIT',     -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'     -- and
src/Vulkan/Extensions/VK_EXT_tooling_info.hs view
@@ -112,12 +112,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceToolPropertiesEXT-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pToolCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceToolPropertiesEXT-pToolCount-parameter#+--     @pToolCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pToolCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceToolPropertiesEXT-pToolProperties-parameter#+--     If the value referenced by @pToolCount@ is not @0@, and --     @pToolProperties@ is not @NULL@, @pToolProperties@ /must/ be a valid --     pointer to an array of @pToolCount@ --     'PhysicalDeviceToolPropertiesEXT' structures
src/Vulkan/Extensions/VK_EXT_transform_feedback.hs view
@@ -108,67 +108,84 @@ -- -- == Valid Usage ----- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-transformFeedback-02355#+--     'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@ --     /must/ be enabled ----- -   @firstBinding@ /must/ be less than+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02356#+--     @firstBinding@ /must/ be less than --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@ ----- -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-firstBinding-02357# The+--     sum of @firstBinding@ and @bindingCount@ /must/ be less than or --     equal to --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@ ----- -   All elements of @pOffsets@ /must/ be less than the size of the+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02358# All+--     elements of @pOffsets@ /must/ be less than the size of the --     corresponding element in @pBuffers@ ----- -   All elements of @pOffsets@ /must/ be a multiple of 4+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02359# All+--     elements of @pOffsets@ /must/ be a multiple of 4 ----- -   All elements of @pBuffers@ /must/ have been created with the+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02360# All+--     elements of @pBuffers@ /must/ have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT' --     flag ----- -   If the optional @pSize@ array is specified, each element of @pSizes@---     /must/ either be 'Vulkan.Core10.APIConstants.WHOLE_SIZE', or be less---     than or equal to+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pSize-02361# If the+--     optional @pSize@ array is specified, each element of @pSizes@ /must/+--     either be 'Vulkan.Core10.APIConstants.WHOLE_SIZE', or be less than+--     or equal to --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBufferSize@ ----- -   All elements of @pSizes@ /must/ be either+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pSizes-02362# All+--     elements of @pSizes@ /must/ be either --     'Vulkan.Core10.APIConstants.WHOLE_SIZE', or less than or equal to --     the size of the corresponding buffer in @pBuffers@ ----- -   All elements of @pOffsets@ plus @pSizes@, where the @pSizes@,---     element is not 'Vulkan.Core10.APIConstants.WHOLE_SIZE', /must/ be---     less than or equal to the size of the corresponding buffer in---     @pBuffers@+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-02363# All+--     elements of @pOffsets@ plus @pSizes@, where the @pSizes@, element is+--     not 'Vulkan.Core10.APIConstants.WHOLE_SIZE', /must/ be less than or+--     equal to the size of the corresponding buffer in @pBuffers@ ----- -   Each element of @pBuffers@ that is non-sparse /must/ be bound---     completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-02364# Each+--     element of @pBuffers@ that is non-sparse /must/ be bound completely+--     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'+--     object ----- -   Transform feedback /must/ not be active when the+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-None-02365# Transform+--     feedback /must/ not be active when the --     'cmdBindTransformFeedbackBuffersEXT' command is recorded -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pBuffers-parameter#+--     @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@ --     valid 'Vulkan.Core10.Handles.Buffer' handles ----- -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-pOffsets-parameter#+--     @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@ --     'Vulkan.Core10.FundamentalTypes.DeviceSize' values ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-commandBuffer-cmdpool#+--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   @bindingCount@ /must/ be greater than @0@+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-bindingCount-arraylength#+--     @bindingCount@ /must/ be greater than @0@ ----- -   Both of @commandBuffer@, and the elements of @pBuffers@ /must/ have---     been created, allocated, or retrieved from the same+-- -   #VUID-vkCmdBindTransformFeedbackBuffersEXT-commonparent# Both of+--     @commandBuffer@, and the elements of @pBuffers@ /must/ have been+--     created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization@@ -257,64 +274,79 @@ -- -- == Valid Usage ----- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-transformFeedback-02366#+--     'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@ --     /must/ be enabled ----- -   Transform feedback /must/ not be active+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-None-02367# Transform feedback+--     /must/ not be active ----- -   @firstCounterBuffer@ /must/ be less than+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02368#+--     @firstCounterBuffer@ /must/ be less than --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@ ----- -   The sum of @firstCounterBuffer@ and @counterBufferCount@ /must/ be---     less than or equal to+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-firstCounterBuffer-02369# The+--     sum of @firstCounterBuffer@ and @counterBufferCount@ /must/ be less+--     than or equal to --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@ ----- -   If @counterBufferCount@ is not @0@, and @pCounterBuffers@ is not+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-counterBufferCount-02607# If+--     @counterBufferCount@ is not @0@, and @pCounterBuffers@ is not --     @NULL@, @pCounterBuffers@ /must/ be a valid pointer to an array of --     @counterBufferCount@ 'Vulkan.Core10.Handles.Buffer' handles that are --     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   For each buffer handle in the array, if it is not+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-02370#+--     For each buffer handle in the array, if it is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ reference a --     buffer large enough to hold 4 bytes at the corresponding offset from --     the @pCounterBufferOffsets@ array ----- -   If @pCounterBuffer@ is @NULL@, then @pCounterBufferOffsets@ /must/---     also be @NULL@+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffer-02371# If+--     @pCounterBuffer@ is @NULL@, then @pCounterBufferOffsets@ /must/ also+--     be @NULL@ ----- -   For each buffer handle in the @pCounterBuffers@ array that is not+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-pCounterBuffers-02372# For each+--     buffer handle in the @pCounterBuffers@ array that is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ have been created --     with a @usage@ value containing --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT' ----- -   The last vertex processing stage of the bound graphics pipeline---     /must/ have been declared with the @Xfb@ execution mode+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-None-04128# The last vertex+--     processing stage of the bound graphics pipeline /must/ have been+--     declared with the @Xfb@ execution mode ----- -   Transform feedback /must/ not be made active in a render pass---     instance with multiview enabled+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-None-02373# Transform feedback+--     /must/ not be made active in a render pass instance with multiview+--     enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   If @counterBufferCount@ is not @0@, and @pCounterBufferOffsets@ is+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-parameter#+--     If @counterBufferCount@ is not @0@, and @pCounterBufferOffsets@ is --     not @NULL@, @pCounterBufferOffsets@ /must/ be a valid pointer to an --     array of @counterBufferCount@ --     'Vulkan.Core10.FundamentalTypes.DeviceSize' values ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-renderpass# This command /must/+--     only be called inside of a render pass instance ----- -   Both of @commandBuffer@, and the elements of @pCounterBuffers@ that---     are valid handles of non-ignored parameters /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdBeginTransformFeedbackEXT-commonparent# Both of+--     @commandBuffer@, and the elements of @pCounterBuffers@ that are+--     valid handles of non-ignored parameters /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -410,58 +442,71 @@ -- -- == Valid Usage ----- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@+-- -   #VUID-vkCmdEndTransformFeedbackEXT-transformFeedback-02374#+--     'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@ --     /must/ be enabled ----- -   Transform feedback /must/ be active+-- -   #VUID-vkCmdEndTransformFeedbackEXT-None-02375# Transform feedback+--     /must/ be active ----- -   @firstCounterBuffer@ /must/ be less than+-- -   #VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02376#+--     @firstCounterBuffer@ /must/ be less than --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@ ----- -   The sum of @firstCounterBuffer@ and @counterBufferCount@ /must/ be---     less than or equal to+-- -   #VUID-vkCmdEndTransformFeedbackEXT-firstCounterBuffer-02377# The sum+--     of @firstCounterBuffer@ and @counterBufferCount@ /must/ be less than+--     or equal to --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackBuffers@ ----- -   If @counterBufferCount@ is not @0@, and @pCounterBuffers@ is not+-- -   #VUID-vkCmdEndTransformFeedbackEXT-counterBufferCount-02608# If+--     @counterBufferCount@ is not @0@, and @pCounterBuffers@ is not --     @NULL@, @pCounterBuffers@ /must/ be a valid pointer to an array of --     @counterBufferCount@ 'Vulkan.Core10.Handles.Buffer' handles that are --     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   For each buffer handle in the array, if it is not+-- -   #VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-02378# For+--     each buffer handle in the array, if it is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ reference a --     buffer large enough to hold 4 bytes at the corresponding offset from --     the @pCounterBufferOffsets@ array ----- -   If @pCounterBuffer@ is @NULL@, then @pCounterBufferOffsets@ /must/---     also be @NULL@+-- -   #VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffer-02379# If+--     @pCounterBuffer@ is @NULL@, then @pCounterBufferOffsets@ /must/ also+--     be @NULL@ ----- -   For each buffer handle in the @pCounterBuffers@ array that is not+-- -   #VUID-vkCmdEndTransformFeedbackEXT-pCounterBuffers-02380# For each+--     buffer handle in the @pCounterBuffers@ array that is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ have been created --     with a @usage@ value containing --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   If @counterBufferCount@ is not @0@, and @pCounterBufferOffsets@ is+-- -   #VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-parameter#+--     If @counterBufferCount@ is not @0@, and @pCounterBufferOffsets@ is --     not @NULL@, @pCounterBufferOffsets@ /must/ be a valid pointer to an --     array of @counterBufferCount@ --     'Vulkan.Core10.FundamentalTypes.DeviceSize' values ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdEndTransformFeedbackEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdEndTransformFeedbackEXT-renderpass# This command /must/+--     only be called inside of a render pass instance ----- -   Both of @commandBuffer@, and the elements of @pCounterBuffers@ that---     are valid handles of non-ignored parameters /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdEndTransformFeedbackEXT-commonparent# Both of+--     @commandBuffer@, and the elements of @pCounterBuffers@ that are+--     valid handles of non-ignored parameters /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -548,17 +593,20 @@ -- -- == Valid Usage ----- -   @queryPool@ /must/ have been created with a @queryType@ that differs---     from that of any queries that are+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryPool-01922# @queryPool@ /must/+--     have been created with a @queryType@ that differs from that of any+--     queries that are --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active> --     within @commandBuffer@ ----- -   All queries used by the command /must/ be unavailable+-- -   #VUID-vkCmdBeginQueryIndexedEXT-None-00807# All queries used by the+--     command /must/ be unavailable ----- -   The @queryType@ used to create @queryPool@ /must/ not be+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-02804# The @queryType@+--     used to create @queryPool@ /must/ not be --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TIMESTAMP' ----- -   If the+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-00800# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-occlusionQueryPrecise precise occlusion queries> --     feature is not enabled, or the @queryType@ used to create --     @queryPool@ was not@@ -566,52 +614,63 @@ --     not contain --     'Vulkan.Core10.Enums.QueryControlFlagBits.QUERY_CONTROL_PRECISE_BIT' ----- -   @query@ /must/ be less than the number of queries in @queryPool@+-- -   #VUID-vkCmdBeginQueryIndexedEXT-query-00802# @query@ /must/ be less+--     than the number of queries in @queryPool@ ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-00803# If the @queryType@+--     used to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_OCCLUSION', the --     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-00804# If the @queryType@+--     used to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and --     any of the @pipelineStatistics@ indicate graphics operations, the --     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-00805# If the @queryType@+--     used to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PIPELINE_STATISTICS' and --     any of the @pipelineStatistics@ indicate compute operations, the --     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support compute operations ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-01885# @commandBuffer@+--     /must/ not be a protected command buffer ----- -   If called within a render pass instance, the sum of @query@ and the---     number of bits set in the current subpass’s view mask /must/ be less---     than or equal to the number of queries in @queryPool@+-- -   #VUID-vkCmdBeginQueryIndexedEXT-query-00808# If called within a+--     render pass instance, the sum of @query@ and the number of bits set+--     in the current subpass’s view mask /must/ be less than or equal to+--     the number of queries in @queryPool@ ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-02338# If the @queryType@+--     used to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' --     the 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-02339# If the @queryType@+--     used to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' --     the @index@ parameter /must/ be less than --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@ ----- -   If the @queryType@ used to create @queryPool@ was not+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-02340# If the @queryType@+--     used to create @queryPool@ was not --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' --     the @index@ /must/ be zero ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryType-02341# If the @queryType@+--     used to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' --     then --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackQueries@ --     /must/ be supported ----- -   If @queryPool@ was created with a @queryType@ of+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryPool-03223# If @queryPool@ was+--     created with a @queryType@ of --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', --     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#profiling-lock profiling lock>@@ -619,21 +678,24 @@ --     'Vulkan.Core10.CommandBuffer.beginCommandBuffer' was called on --     @commandBuffer@ ----- -   If @queryPool@ was created with a @queryType@ of+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryPool-03224# If @queryPool@ was+--     created with a @queryType@ of --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and --     one of the counters used to create @queryPool@ was --     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR', --     the query begin /must/ be the first recorded command in --     @commandBuffer@ ----- -   If @queryPool@ was created with a @queryType@ of+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryPool-03225# If @queryPool@ was+--     created with a @queryType@ of --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and --     one of the counters used to create @queryPool@ was --     'Vulkan.Extensions.VK_KHR_performance_query.PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR', --     the begin command /must/ not be recorded within a render pass --     instance ----- -   If @queryPool@ was created with a @queryType@ of+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryPool-03226# If @queryPool@ was+--     created with a @queryType@ of --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' and --     another query pool with a @queryType@ --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR' has@@ -643,7 +705,8 @@ --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-performanceCounterMultipleQueryPools performanceCounterMultipleQueryPools> --     feature /must/ be enabled ----- -   If @queryPool@ was created with a @queryType@ of+-- -   #VUID-vkCmdBeginQueryIndexedEXT-None-02863# If @queryPool@ was+--     created with a @queryType@ of --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PERFORMANCE_QUERY_KHR', --     this command /must/ not be recorded in a command buffer that, either --     directly or through secondary command buffers, also contains a@@ -652,23 +715,28 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle+-- -   #VUID-vkCmdBeginQueryIndexedEXT-queryPool-parameter# @queryPool@+--     /must/ be a valid 'Vulkan.Core10.Handles.QueryPool' handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-vkCmdBeginQueryIndexedEXT-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core10.Enums.QueryControlFlagBits.QueryControlFlagBits' --     values ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations ----- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,+-- -   #VUID-vkCmdBeginQueryIndexedEXT-commonparent# Both of+--     @commandBuffer@, and @queryPool@ /must/ have been created, --     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization@@ -748,47 +816,58 @@ -- -- == Valid Usage ----- -   All queries used by the command /must/ be+-- -   #VUID-vkCmdEndQueryIndexedEXT-None-02342# All queries used by the+--     command /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-active active> ----- -   @query@ /must/ be less than the number of queries in @queryPool@+-- -   #VUID-vkCmdEndQueryIndexedEXT-query-02343# @query@ /must/ be less+--     than the number of queries in @queryPool@ ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdEndQueryIndexedEXT-commandBuffer-02344# @commandBuffer@+--     /must/ not be a protected command buffer ----- -   If 'cmdEndQueryIndexedEXT' is called within a render pass instance,---     the sum of @query@ and the number of bits set in the current---     subpass’s view mask /must/ be less than or equal to the number of---     queries in @queryPool@+-- -   #VUID-vkCmdEndQueryIndexedEXT-query-02345# If+--     'cmdEndQueryIndexedEXT' is called within a render pass instance, the+--     sum of @query@ and the number of bits set in the current subpass’s+--     view mask /must/ be less than or equal to the number of queries in+--     @queryPool@ ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-02346# If the @queryType@+--     used to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' --     the @index@ parameter /must/ be less than --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@ ----- -   If the @queryType@ used to create @queryPool@ was not+-- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-02347# If the @queryType@+--     used to create @queryPool@ was not --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' --     the @index@ /must/ be zero ----- -   If the @queryType@ used to create @queryPool@ was+-- -   #VUID-vkCmdEndQueryIndexedEXT-queryType-02723# If the @queryType@+--     used to create @queryPool@ was --     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT' --     @index@ /must/ equal the @index@ used to begin the query -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdEndQueryIndexedEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle+-- -   #VUID-vkCmdEndQueryIndexedEXT-queryPool-parameter# @queryPool@+--     /must/ be a valid 'Vulkan.Core10.Handles.QueryPool' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdEndQueryIndexedEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdEndQueryIndexedEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations ----- -   Both of @commandBuffer@, and @queryPool@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdEndQueryIndexedEXT-commonparent# Both of @commandBuffer@,+--     and @queryPool@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -860,7 +939,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -869,20 +949,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -891,7 +974,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -905,23 +989,25 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02697# For each set /n/+--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'+--     bound to the pipeline bind point used by this command, a descriptor+--     set /must/ have been bound to /n/ at the same pipeline bind point,+--     with a 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for+--     set /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02698# For each push+--     constant that is statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command, a push constant value /must/ have been set for --     the same pipeline bind point, with a@@ -930,28 +1016,32 @@ --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02699# Descriptors in each+--     bound descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02700# A valid pipeline+--     /must/ be bound to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02859# There /must/ not+--     have been any calls to dynamic state setting commands for any state+--     not specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command, since+--     that pipeline was bound+--+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -963,21 +1053,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -985,7 +1077,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -993,46 +1085,54 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707# If+--     @commandBuffer@ is an unprotected command buffer, any resource --     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the --     pipeline bind point used by this command /must/ not be a protected --     resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-sparseImageInt64Atomics-04474#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -1041,7 +1141,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-sparseImageInt64Atomics-04475#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -1050,7 +1151,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   The current render pass /must/ be+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684# The current+--     render pass /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible> --     with the @renderPass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure@@ -1058,25 +1160,32 @@ --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685# The subpass index+--     of the current render pass /must/ be equal to the @subpass@ member+--     of the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure --     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02686# Every input+--     attachment used by the current subpass /must/ be bound to the+--     pipeline via a descriptor set ----- -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-04584# Image subresources+--     used as attachments in the current render pass /must/ not be+--     accessed in any way other than as an attachment by this command,+--     except for cases involving read-only access to depth\/stencil+--     attachments as described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter ----- -   If the draw is recorded in a render pass instance with multiview+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688#+--     If the draw is recorded in a render pass instance with multiview --     enabled, the maximum instance index /must/ be less than or equal to --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@ ----- -   If the bound graphics pipeline was created with+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689# If+--     the bound graphics pipeline was created with --     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@ --     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass --     has a depth\/stencil attachment, then that attachment /must/ have@@ -1084,7 +1193,8 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' --     bit set ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'@@ -1097,7 +1207,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -1110,7 +1221,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with both the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419# If the+--     bound graphics pipeline state was created with both the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -1124,7 +1236,8 @@ --     /must/ match the @scissorCount@ parameter of --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-04137# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -1135,7 +1248,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-04138# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -1146,7 +1260,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-04139# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -1157,7 +1272,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-04140# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -1168,7 +1284,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-VkPipelineVieportCreateInfo-04141#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'@@ -1179,7 +1296,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-VkPipelineVieportCreateInfo-04142#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'@@ -1190,7 +1308,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT' --     dynamic state enabled then --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'@@ -1203,7 +1322,8 @@ --     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ --     state ----- -   If the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports> --     limit is not supported, the bound graphics pipeline was created with --     the@@ -1217,56 +1337,74 @@ --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' --     /must/ be @1@ ----- -   All vertex input bindings accessed via vertex input variables---     declared in the vertex shader entry point’s interface /must/ have---     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers---     bound+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-04007# All vertex input+--     bindings accessed via vertex input variables declared in the vertex+--     shader entry point’s interface /must/ have either valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound ----- -   If the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-04008# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor> --     feature is not enabled, all vertex input bindings accessed via --     vertex input variables declared in the vertex shader entry point’s --     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-None-02721# For a given vertex+--     buffer binding, any attribute data fetched /must/ be entirely+--     contained within the corresponding vertex buffer binding, as+--     described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???> ----- -   'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287#+--     'PhysicalDeviceTransformFeedbackFeaturesEXT'::@transformFeedback@ --     /must/ be enabled ----- -   The implementation /must/ support+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288# The+--     implementation /must/ support --     'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackDraw@ ----- -   @vertexStride@ /must/ be greater than 0 and less than or equal to+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-vertexStride-02289#+--     @vertexStride@ /must/ be greater than 0 and less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxTransformFeedbackBufferDataStride@ ----- -   @counterBuffer@ /must/ have been created with the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567# If+--     @counterBuffer@ is non-sparse then it /must/ be bound completely and+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290#+--     @counterBuffer@ /must/ have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-counterBufferOffset-04568#+--     @counterBufferOffset@ /must/ be a multiple of @4@ --+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646#+--     @commandBuffer@ /must/ not be a protected command buffer+-- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @counterBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-parameter#+--     @counterBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' --     handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-renderpass# This command /must/+--     only be called inside of a render pass instance ----- -   Both of @commandBuffer@, and @counterBuffer@ /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdDrawIndirectByteCountEXT-commonparent# Both of+--     @commandBuffer@, and @counterBuffer@ /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -1349,12 +1487,12 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceTransformFeedbackFeaturesEXT = PhysicalDeviceTransformFeedbackFeaturesEXT-  { -- | @transformFeedback@ indicates whether the implementation supports-    -- transform feedback and shader modules /can/ declare the-    -- @TransformFeedback@ capability.+  { -- | #features-transformFeedback# @transformFeedback@ indicates whether the+    -- implementation supports transform feedback and shader modules /can/+    -- declare the @TransformFeedback@ capability.     transformFeedback :: Bool-  , -- | @geometryStreams@ indicates whether the implementation supports the-    -- @GeometryStreams@ SPIR-V capability.+  , -- | #features-geometryStreams# @geometryStreams@ indicates whether the+    -- implementation supports the @GeometryStreams@ SPIR-V capability.     geometryStreams :: Bool   }   deriving (Typeable, Eq)@@ -1422,37 +1560,43 @@ -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceTransformFeedbackPropertiesEXT = PhysicalDeviceTransformFeedbackPropertiesEXT-  { -- | @maxTransformFeedbackStreams@ is the maximum number of vertex streams-    -- that can be output from geometry shaders declared with the-    -- @GeometryStreams@ capability. If the implementation does not support+  { -- | #limits-maxTransformFeedbackStreams# @maxTransformFeedbackStreams@ is+    -- the maximum number of vertex streams that can be output from geometry+    -- shaders declared with the @GeometryStreams@ capability. If the+    -- implementation does not support     -- 'PhysicalDeviceTransformFeedbackFeaturesEXT'::@geometryStreams@ then     -- @maxTransformFeedbackStreams@ /must/ be set to @1@.     maxTransformFeedbackStreams :: Word32-  , -- | @maxTransformFeedbackBuffers@ is the maximum number of transform-    -- feedback buffers that can be bound for capturing shader outputs from the-    -- last vertex processing stage.+  , -- | #limits-maxTransformFeedbackBuffers# @maxTransformFeedbackBuffers@ is+    -- the maximum number of transform feedback buffers that can be bound for+    -- capturing shader outputs from the last vertex processing stage.     maxTransformFeedbackBuffers :: Word32-  , -- | @maxTransformFeedbackBufferSize@ is the maximum size that can be-    -- specified when binding a buffer for transform feedback in-    -- 'cmdBindTransformFeedbackBuffersEXT'.+  , -- | #limits-maxTransformFeedbackBufferSize# @maxTransformFeedbackBufferSize@+    -- is the maximum size that can be specified when binding a buffer for+    -- transform feedback in 'cmdBindTransformFeedbackBuffersEXT'.     maxTransformFeedbackBufferSize :: DeviceSize-  , -- | @maxTransformFeedbackStreamDataSize@ is the maximum amount of data in+  , -- | #limits-maxTransformFeedbackStreamDataSize#+    -- @maxTransformFeedbackStreamDataSize@ is the maximum amount of data in     -- bytes for each vertex that captured to one or more transform feedback     -- buffers associated with a specific vertex stream.     maxTransformFeedbackStreamDataSize :: Word32-  , -- | @maxTransformFeedbackBufferDataSize@ is the maximum amount of data in+  , -- | #limits-maxTransformFeedbackBufferDataSize#+    -- @maxTransformFeedbackBufferDataSize@ is the maximum amount of data in     -- bytes for each vertex that can be captured to a specific transform     -- feedback buffer.     maxTransformFeedbackBufferDataSize :: Word32-  , -- | @maxTransformFeedbackBufferDataStride@ is the maximum stride between+  , -- | #limits-maxTransformFeedbackBufferDataStride#+    -- @maxTransformFeedbackBufferDataStride@ is the maximum stride between     -- each capture of vertex data to the buffer.     maxTransformFeedbackBufferDataStride :: Word32-  , -- | @transformFeedbackQueries@ is true if the implementation supports the+  , -- | #limits-transformFeedbackQueries# @transformFeedbackQueries@ is true if+    -- the implementation supports the     -- 'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT'     -- query type. @transformFeedbackQueries@ is false if queries of this type     -- /cannot/ be created.     transformFeedbackQueries :: Bool-  , -- | @transformFeedbackStreamsLinesTriangles@ is true if the implementation+  , -- | #limits-transformFeedbackStreamsLinesTriangles#+    -- @transformFeedbackStreamsLinesTriangles@ is true if the implementation     -- supports the geometry shader @OpExecutionMode@ of @OutputLineStrip@ and     -- @OutputTriangleStrip@ in addition to @OutputPoints@ when more than one     -- vertex stream is output. If @transformFeedbackStreamsLinesTriangles@ is@@ -1460,15 +1604,16 @@     -- @OutputPoints@ when more than one vertex stream is output from the     -- geometry shader.     transformFeedbackStreamsLinesTriangles :: Bool-  , -- | @transformFeedbackRasterizationStreamSelect@ is true if the+  , -- | #limits-transformFeedbackRasterizationStreamSelect#+    -- @transformFeedbackRasterizationStreamSelect@ is true if the     -- implementation supports the @GeometryStreams@ SPIR-V capability and the     -- application can use 'PipelineRasterizationStateStreamCreateInfoEXT' to     -- modify which vertex stream output is used for rasterization. Otherwise     -- vertex stream @0@ /must/ always be used for rasterization.     transformFeedbackRasterizationStreamSelect :: Bool-  , -- | @transformFeedbackDraw@ is true if the implementation supports the-    -- 'cmdDrawIndirectByteCountEXT' function otherwise the function /must/ not-    -- be called.+  , -- | #limits-transformFeedbackDraw# @transformFeedbackDraw@ is true if the+    -- implementation supports the 'cmdDrawIndirectByteCountEXT' function+    -- otherwise the function /must/ not be called.     transformFeedbackDraw :: Bool   }   deriving (Typeable, Eq)@@ -1562,13 +1707,16 @@ data PipelineRasterizationStateStreamCreateInfoEXT = PipelineRasterizationStateStreamCreateInfoEXT   { -- | @flags@ is reserved for future use.     --+    -- #VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-flags-zerobitmask#     -- @flags@ /must/ be @0@     flags :: PipelineRasterizationStateStreamCreateFlagsEXT   , -- | @rasterizationStream@ is the vertex stream selected for rasterization.     --+    -- #VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02325#     -- @rasterizationStream@ /must/ be less than     -- 'PhysicalDeviceTransformFeedbackPropertiesEXT'::@maxTransformFeedbackStreams@     --+    -- #VUID-VkPipelineRasterizationStateStreamCreateInfoEXT-rasterizationStream-02326#     -- @rasterizationStream@ /must/ be zero if     -- 'PhysicalDeviceTransformFeedbackPropertiesEXT'::@transformFeedbackRasterizationStreamSelect@     -- is 'Vulkan.Core10.FundamentalTypes.FALSE'
src/Vulkan/Extensions/VK_EXT_validation_cache.hs view
@@ -137,16 +137,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateValidationCacheEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateValidationCacheEXT-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'ValidationCacheCreateInfoEXT' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateValidationCacheEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pValidationCache@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateValidationCacheEXT-pValidationCache-parameter#+--     @pValidationCache@ /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.ValidationCacheEXT' handle -- -- == Return Codes@@ -216,27 +220,33 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyValidationCacheEXT-validationCache-01537# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @validationCache@ was created, a compatible set of --     callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyValidationCacheEXT-validationCache-01538# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @validationCache@ was created, @pAllocator@ /must/ be --     @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyValidationCacheEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @validationCache@ is not---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @validationCache@ /must/---     be a valid 'Vulkan.Extensions.Handles.ValidationCacheEXT' handle+-- -   #VUID-vkDestroyValidationCacheEXT-validationCache-parameter# If+--     @validationCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+--     @validationCache@ /must/ be a valid+--     'Vulkan.Extensions.Handles.ValidationCacheEXT' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroyValidationCacheEXT-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @validationCache@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkDestroyValidationCacheEXT-validationCache-parent# If+--     @validationCache@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -346,18 +356,22 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetValidationCacheDataEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @validationCache@ /must/ be a valid+-- -   #VUID-vkGetValidationCacheDataEXT-validationCache-parameter#+--     @validationCache@ /must/ be a valid --     'Vulkan.Extensions.Handles.ValidationCacheEXT' handle ----- -   @pDataSize@ /must/ be a valid pointer to a @size_t@ value+-- -   #VUID-vkGetValidationCacheDataEXT-pDataSize-parameter# @pDataSize@+--     /must/ be a valid pointer to a @size_t@ value ----- -   If the value referenced by @pDataSize@ is not @0@, and @pData@ is---     not @NULL@, @pData@ /must/ be a valid pointer to an array of---     @pDataSize@ bytes+-- -   #VUID-vkGetValidationCacheDataEXT-pData-parameter# If the value+--     referenced by @pDataSize@ is not @0@, and @pData@ is not @NULL@,+--     @pData@ /must/ be a valid pointer to an array of @pDataSize@ bytes ----- -   @validationCache@ /must/ have been created, allocated, or retrieved+-- -   #VUID-vkGetValidationCacheDataEXT-validationCache-parent#+--     @validationCache@ /must/ have been created, allocated, or retrieved --     from @device@ -- -- == Return Codes@@ -423,26 +437,31 @@ -- -- == Valid Usage ----- -   @dstCache@ /must/ not appear in the list of source caches+-- -   #VUID-vkMergeValidationCachesEXT-dstCache-01536# @dstCache@ /must/+--     not appear in the list of source caches -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkMergeValidationCachesEXT-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @dstCache@ /must/ be a valid---     'Vulkan.Extensions.Handles.ValidationCacheEXT' handle+-- -   #VUID-vkMergeValidationCachesEXT-dstCache-parameter# @dstCache@+--     /must/ be a valid 'Vulkan.Extensions.Handles.ValidationCacheEXT'+--     handle ----- -   @pSrcCaches@ /must/ be a valid pointer to an array of---     @srcCacheCount@ valid 'Vulkan.Extensions.Handles.ValidationCacheEXT'---     handles+-- -   #VUID-vkMergeValidationCachesEXT-pSrcCaches-parameter# @pSrcCaches@+--     /must/ be a valid pointer to an array of @srcCacheCount@ valid+--     'Vulkan.Extensions.Handles.ValidationCacheEXT' handles ----- -   @srcCacheCount@ /must/ be greater than @0@+-- -   #VUID-vkMergeValidationCachesEXT-srcCacheCount-arraylength#+--     @srcCacheCount@ /must/ be greater than @0@ ----- -   @dstCache@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkMergeValidationCachesEXT-dstCache-parent# @dstCache@ /must/+--     have been created, allocated, or retrieved from @device@ ----- -   Each element of @pSrcCaches@ /must/ have been created, allocated, or---     retrieved from @device@+-- -   #VUID-vkMergeValidationCachesEXT-pSrcCaches-parent# Each element of+--     @pSrcCaches@ /must/ have been created, allocated, or retrieved from+--     @device@ -- -- == Host Synchronization --@@ -491,23 +510,28 @@ -- -- == Valid Usage ----- -   If @initialDataSize@ is not @0@, it /must/ be equal to the size of+-- -   #VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01534# If+--     @initialDataSize@ is not @0@, it /must/ be equal to the size of --     @pInitialData@, as returned by 'getValidationCacheDataEXT' when --     @pInitialData@ was originally retrieved ----- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ have been+-- -   #VUID-VkValidationCacheCreateInfoEXT-initialDataSize-01535# If+--     @initialDataSize@ is not @0@, @pInitialData@ /must/ have been --     retrieved from a previous call to 'getValidationCacheDataEXT' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkValidationCacheCreateInfoEXT-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkValidationCacheCreateInfoEXT-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkValidationCacheCreateInfoEXT-flags-zerobitmask# @flags@+--     /must/ be @0@ ----- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ be a valid+-- -   #VUID-VkValidationCacheCreateInfoEXT-pInitialData-parameter# If+--     @initialDataSize@ is not @0@, @pInitialData@ /must/ be a valid --     pointer to an array of @initialDataSize@ bytes -- -- = See Also@@ -585,6 +609,7 @@     -- validation results for this 'Vulkan.Core10.Handles.ShaderModule' will be     -- written (if not already present).     --+    -- #VUID-VkShaderModuleValidationCacheCreateInfoEXT-validationCache-parameter#     -- @validationCache@ /must/ be a valid     -- 'Vulkan.Extensions.Handles.ValidationCacheEXT' handle     validationCache :: ValidationCacheEXT }
src/Vulkan/Extensions/VK_EXT_validation_features.hs view
@@ -67,26 +67,30 @@ -- -- == Valid Usage ----- -   If the @pEnabledValidationFeatures@ array contains+-- -   #VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02967# If+--     the @pEnabledValidationFeatures@ array contains --     'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT', --     then it /must/ also contain --     'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT' ----- -   If the @pEnabledValidationFeatures@ array contains+-- -   #VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-02968# If+--     the @pEnabledValidationFeatures@ array contains --     'VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT', then it /must/ not --     contain 'VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkValidationFeaturesEXT-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_VALIDATION_FEATURES_EXT' ----- -   If @enabledValidationFeatureCount@ is not @0@,+-- -   #VUID-VkValidationFeaturesEXT-pEnabledValidationFeatures-parameter#+--     If @enabledValidationFeatureCount@ is not @0@, --     @pEnabledValidationFeatures@ /must/ be a valid pointer to an array --     of @enabledValidationFeatureCount@ valid --     'ValidationFeatureEnableEXT' values ----- -   If @disabledValidationFeatureCount@ is not @0@,+-- -   #VUID-VkValidationFeaturesEXT-pDisabledValidationFeatures-parameter#+--     If @disabledValidationFeatureCount@ is not @0@, --     @pDisabledValidationFeatures@ /must/ be a valid pointer to an array --     of @disabledValidationFeatureCount@ valid --     'ValidationFeatureDisableEXT' values
src/Vulkan/Extensions/VK_EXT_validation_flags.hs view
@@ -63,6 +63,7 @@     -- 'ValidationCheckEXT' values specifying the validation checks to be     -- disabled.     --+    -- #VUID-VkValidationFlagsEXT-pDisabledValidationChecks-parameter#     -- @pDisabledValidationChecks@ /must/ be a valid pointer to an array of     -- @disabledValidationCheckCount@ valid 'ValidationCheckEXT' values     disabledValidationChecks :: Vector ValidationCheckEXT }
src/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs view
@@ -52,20 +52,25 @@ -- -- == Valid Usage ----- -   @binding@ /must/ be less than+-- -   #VUID-VkVertexInputBindingDivisorDescriptionEXT-binding-01869#+--     @binding@ /must/ be less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxVertexInputBindings@ ----- -   If the @vertexAttributeInstanceRateZeroDivisor@ feature is not+-- -   #VUID-VkVertexInputBindingDivisorDescriptionEXT-vertexAttributeInstanceRateZeroDivisor-02228#+--     If the @vertexAttributeInstanceRateZeroDivisor@ feature is not --     enabled, @divisor@ /must/ not be @0@ ----- -   If the @vertexAttributeInstanceRateDivisor@ feature is not enabled,+-- -   #VUID-VkVertexInputBindingDivisorDescriptionEXT-vertexAttributeInstanceRateDivisor-02229#+--     If the @vertexAttributeInstanceRateDivisor@ feature is not enabled, --     @divisor@ /must/ be @1@ ----- -   @divisor@ /must/ be a value between @0@ and+-- -   #VUID-VkVertexInputBindingDivisorDescriptionEXT-divisor-01870#+--     @divisor@ /must/ be a value between @0@ and --     'PhysicalDeviceVertexAttributeDivisorPropertiesEXT'::@maxVertexAttribDivisor@, --     inclusive ----- -   'Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@inputRate@+-- -   #VUID-VkVertexInputBindingDivisorDescriptionEXT-inputRate-01871#+--     'Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@inputRate@ --     /must/ be of type --     'Vulkan.Core10.Enums.VertexInputRate.VERTEX_INPUT_RATE_INSTANCE' for --     this @binding@@@ -141,6 +146,7 @@     -- 'VertexInputBindingDivisorDescriptionEXT' structures, which specifies     -- the divisor value for each binding.     --+    -- #VUID-VkPipelineVertexInputDivisorStateCreateInfoEXT-pVertexBindingDivisors-parameter#     -- @pVertexBindingDivisors@ /must/ be a valid pointer to an array of     -- @vertexBindingDivisorCount@ 'VertexInputBindingDivisorDescriptionEXT'     -- structures@@ -206,9 +212,9 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceVertexAttributeDivisorPropertiesEXT = PhysicalDeviceVertexAttributeDivisorPropertiesEXT-  { -- | @maxVertexAttribDivisor@ is the maximum value of the number of instances-    -- that will repeat the value of vertex attribute data when instanced-    -- rendering is enabled.+  { -- | #limits-maxVertexAttribDivisor# @maxVertexAttribDivisor@ is the maximum+    -- value of the number of instances that will repeat the value of vertex+    -- attribute data when instanced rendering is enabled.     maxVertexAttribDivisor :: Word32 }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -268,10 +274,12 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceVertexAttributeDivisorFeaturesEXT = PhysicalDeviceVertexAttributeDivisorFeaturesEXT-  { -- | @vertexAttributeInstanceRateDivisor@ specifies whether vertex attribute+  { -- | #features-vertexAttributeInstanceRateDivisor#+    -- @vertexAttributeInstanceRateDivisor@ specifies whether vertex attribute     -- fetching may be repeated in case of instanced rendering.     vertexAttributeInstanceRateDivisor :: Bool-  , -- | @vertexAttributeInstanceRateZeroDivisor@ specifies whether a zero value+  , -- | #features-vertexAttributeInstanceRateZeroDivisor#+    -- @vertexAttributeInstanceRateZeroDivisor@ specifies whether a zero value     -- for 'VertexInputBindingDivisorDescriptionEXT'::@divisor@ is supported.     vertexAttributeInstanceRateZeroDivisor :: Bool   }
src/Vulkan/Extensions/VK_EXT_ycbcr_image_arrays.hs view
@@ -54,8 +54,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceYcbcrImageArraysFeaturesEXT = PhysicalDeviceYcbcrImageArraysFeaturesEXT-  { -- | @ycbcrImageArrays@ indicates that the implementation supports creating-    -- images with a format that requires+  { -- | #features-ycbcrImageArrays# @ycbcrImageArrays@ indicates that the+    -- implementation supports creating images with a format that requires     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion Y′CBCR conversion>     -- and has multiple array layers.     ycbcrImageArrays :: Bool }
src/Vulkan/Extensions/VK_FUCHSIA_imagepipe_surface.hs view
@@ -84,16 +84,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateImagePipeSurfaceFUCHSIA-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateImagePipeSurfaceFUCHSIA-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'ImagePipeSurfaceCreateInfoFUCHSIA' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateImagePipeSurfaceFUCHSIA-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSurface@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateImagePipeSurfaceFUCHSIA-pSurface-parameter# @pSurface@+--     /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes@@ -155,11 +159,13 @@ data ImagePipeSurfaceCreateInfoFUCHSIA = ImagePipeSurfaceCreateInfoFUCHSIA   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-flags-zerobitmask# @flags@+    -- /must/ be @0@     flags :: ImagePipeSurfaceCreateFlagsFUCHSIA   , -- | @imagePipeHandle@ is a @zx_handle_t@ referring to the ImagePipe to     -- associate with the surface.     --+    -- #VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-imagePipeHandle-00000#     -- @imagePipeHandle@ /must/ be a valid @zx_handle_t@     imagePipeHandle :: Zx_handle_t   }
src/Vulkan/Extensions/VK_GGP_frame_token.hs view
@@ -37,7 +37,8 @@ data PresentFrameTokenGGP = PresentFrameTokenGGP   { -- | @frameToken@ is the Google Games Platform frame token.     ---    -- @frameToken@ /must/ be a valid 'GgpFrameToken'+    -- #VUID-VkPresentFrameTokenGGP-frameToken-02680# @frameToken@ /must/ be a+    -- valid 'GgpFrameToken'     frameToken :: GgpFrameToken }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_GGP_stream_descriptor_surface.hs view
@@ -85,16 +85,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateStreamDescriptorSurfaceGGP-instance-parameter#+--     @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateStreamDescriptorSurfaceGGP-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'StreamDescriptorSurfaceCreateInfoGGP' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateStreamDescriptorSurfaceGGP-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSurface@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateStreamDescriptorSurfaceGGP-pSurface-parameter#+--     @pSurface@ /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes@@ -159,11 +163,13 @@ data StreamDescriptorSurfaceCreateInfoGGP = StreamDescriptorSurfaceCreateInfoGGP   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkStreamDescriptorSurfaceCreateInfoGGP-flags-zerobitmask# @flags@+    -- /must/ be @0@     flags :: StreamDescriptorSurfaceCreateFlagsGGP   , -- | @streamDescriptor@ is a 'GgpStreamDescriptor' referring to the GGP     -- stream descriptor to associate with the surface.     --+    -- #VUID-VkStreamDescriptorSurfaceCreateInfoGGP-streamDescriptor-02681#     -- @streamDescriptor@ /must/ be a valid 'GgpStreamDescriptor'     streamDescriptor :: GgpStreamDescriptor   }
src/Vulkan/Extensions/VK_GOOGLE_display_timing.hs view
@@ -79,17 +79,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetRefreshCycleDurationGOOGLE-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @swapchain@ /must/ be a valid+-- -   #VUID-vkGetRefreshCycleDurationGOOGLE-swapchain-parameter#+--     @swapchain@ /must/ be a valid --     'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   @pDisplayTimingProperties@ /must/ be a valid pointer to a+-- -   #VUID-vkGetRefreshCycleDurationGOOGLE-pDisplayTimingProperties-parameter#+--     @pDisplayTimingProperties@ /must/ be a valid pointer to a --     'RefreshCycleDurationGOOGLE' structure ----- -   Both of @device@, and @swapchain@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetRefreshCycleDurationGOOGLE-commonparent# Both of+--     @device@, and @swapchain@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Instance' -- -- == Host Synchronization --@@ -161,22 +164,26 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetPastPresentationTimingGOOGLE-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @swapchain@ /must/ be a valid+-- -   #VUID-vkGetPastPresentationTimingGOOGLE-swapchain-parameter#+--     @swapchain@ /must/ be a valid --     'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   @pPresentationTimingCount@ /must/ be a valid pointer to a @uint32_t@+-- -   #VUID-vkGetPastPresentationTimingGOOGLE-pPresentationTimingCount-parameter#+--     @pPresentationTimingCount@ /must/ be a valid pointer to a @uint32_t@ --     value ----- -   If the value referenced by @pPresentationTimingCount@ is not @0@,+-- -   #VUID-vkGetPastPresentationTimingGOOGLE-pPresentationTimings-parameter#+--     If the value referenced by @pPresentationTimingCount@ is not @0@, --     and @pPresentationTimings@ is not @NULL@, @pPresentationTimings@ --     /must/ be a valid pointer to an array of @pPresentationTimingCount@ --     'PastPresentationTimingGOOGLE' structures ----- -   Both of @device@, and @swapchain@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetPastPresentationTimingGOOGLE-commonparent# Both of+--     @device@, and @swapchain@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Instance' -- -- == Host Synchronization --@@ -386,7 +393,8 @@ -- -- == Valid Usage ----- -   @swapchainCount@ /must/ be the same value as+-- -   #VUID-VkPresentTimesInfoGOOGLE-swapchainCount-01247#+--     @swapchainCount@ /must/ be the same value as --     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@, --     where 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' is --     included in the @pNext@ chain of this 'PresentTimesInfoGOOGLE'@@ -394,13 +402,15 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPresentTimesInfoGOOGLE-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE' ----- -   If @pTimes@ is not @NULL@, @pTimes@ /must/ be a valid pointer to an---     array of @swapchainCount@ 'PresentTimeGOOGLE' structures+-- -   #VUID-VkPresentTimesInfoGOOGLE-pTimes-parameter# If @pTimes@ is not+--     @NULL@, @pTimes@ /must/ be a valid pointer to an array of+--     @swapchainCount@ 'PresentTimeGOOGLE' structures ----- -   @swapchainCount@ /must/ be greater than @0@+-- -   #VUID-VkPresentTimesInfoGOOGLE-swapchainCount-arraylength#+--     @swapchainCount@ /must/ be greater than @0@ -- -- = See Also --
src/Vulkan/Extensions/VK_INTEL_performance_query.hs view
@@ -167,11 +167,13 @@                                . (MonadIO io)                               => -- | @device@ is the logical device used for the queries.                                  ---                                 -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                 -- #VUID-vkInitializePerformanceApiINTEL-device-parameter# @device@ /must/+                                 -- be a valid 'Vulkan.Core10.Handles.Device' handle                                  Device                               -> -- | @pInitializeInfo@ is a pointer to a 'InitializePerformanceApiInfoINTEL'                                  -- structure specifying initialization parameters.                                  --+                                 -- #VUID-vkInitializePerformanceApiINTEL-pInitializeInfo-parameter#                                  -- @pInitializeInfo@ /must/ be a valid pointer to a valid                                  -- 'InitializePerformanceApiInfoINTEL' structure                                  ("initializeInfo" ::: InitializePerformanceApiInfoINTEL)@@ -205,7 +207,8 @@                                  . (MonadIO io)                                 => -- | @device@ is the logical device used for the queries.                                    ---                                   -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                   -- #VUID-vkUninitializePerformanceApiINTEL-device-parameter# @device@+                                   -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                    Device                                 -> io () uninitializePerformanceApiINTEL device = liftIO $ do@@ -233,16 +236,20 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pMarkerInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdSetPerformanceMarkerINTEL-pMarkerInfo-parameter#+--     @pMarkerInfo@ /must/ be a valid pointer to a valid --     'PerformanceMarkerInfoINTEL' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetPerformanceMarkerINTEL-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, compute, or transfer --     operations --@@ -308,16 +315,20 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pMarkerInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdSetPerformanceStreamMarkerINTEL-pMarkerInfo-parameter#+--     @pMarkerInfo@ /must/ be a valid pointer to a valid --     'PerformanceStreamMarkerInfoINTEL' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetPerformanceStreamMarkerINTEL-commandBuffer-cmdpool#+--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, compute, or transfer --     operations --@@ -384,22 +395,27 @@ -- -- == Valid Usage ----- -   @pOverrideInfo@ /must/ not be used with a+-- -   #VUID-vkCmdSetPerformanceOverrideINTEL-pOverrideInfo-02736#+--     @pOverrideInfo@ /must/ not be used with a --     'PerformanceOverrideTypeINTEL' that is not reported available by --     'getPerformanceParameterINTEL' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pOverrideInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdSetPerformanceOverrideINTEL-pOverrideInfo-parameter#+--     @pOverrideInfo@ /must/ be a valid pointer to a valid --     'PerformanceOverrideInfoINTEL' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetPerformanceOverrideINTEL-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, compute, or transfer --     operations --@@ -487,12 +503,14 @@                                      => -- | @device@ is the logical device that the performance query commands will                                         -- be submitted to.                                         ---                                        -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                        -- #VUID-vkAcquirePerformanceConfigurationINTEL-device-parameter# @device@+                                        -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                         Device                                      -> -- | @pAcquireInfo@ is a pointer to a                                         -- 'PerformanceConfigurationAcquireInfoINTEL' structure, specifying the                                         -- performance configuration to acquire.                                         --+                                        -- #VUID-vkAcquirePerformanceConfigurationINTEL-pAcquireInfo-parameter#                                         -- @pAcquireInfo@ /must/ be a valid pointer to a valid                                         -- 'PerformanceConfigurationAcquireInfoINTEL' structure                                         PerformanceConfigurationAcquireInfoINTEL@@ -522,19 +540,23 @@ -- -- == Valid Usage ----- -   @configuration@ /must/ not be released before all command buffers+-- -   #VUID-vkReleasePerformanceConfigurationINTEL-configuration-02737#+--     @configuration@ /must/ not be released before all command buffers --     submitted while the configuration was set are in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle pending state> -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkReleasePerformanceConfigurationINTEL-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @configuration@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkReleasePerformanceConfigurationINTEL-configuration-parameter#+--     If @configuration@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @configuration@ /must/ be a valid --     'Vulkan.Extensions.Handles.PerformanceConfigurationINTEL' handle ----- -   If @configuration@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkReleasePerformanceConfigurationINTEL-configuration-parent#+--     If @configuration@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -585,13 +607,16 @@ -- -- == Valid Usage (Implicit) ----- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+-- -   #VUID-vkQueueSetPerformanceConfigurationINTEL-queue-parameter#+--     @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle ----- -   @configuration@ /must/ be a valid+-- -   #VUID-vkQueueSetPerformanceConfigurationINTEL-configuration-parameter#+--     @configuration@ /must/ be a valid --     'Vulkan.Extensions.Handles.PerformanceConfigurationINTEL' handle ----- -   Both of @configuration@, and @queue@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkQueueSetPerformanceConfigurationINTEL-commonparent# Both of+--     @configuration@, and @queue@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Command Properties --@@ -665,11 +690,13 @@                               . (MonadIO io)                              => -- | @device@ is the logical device to query.                                 ---                                -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                -- #VUID-vkGetPerformanceParameterINTEL-device-parameter# @device@ /must/+                                -- be a valid 'Vulkan.Core10.Handles.Device' handle                                 Device                              -> -- | @parameter@ is the parameter to query.                                 ---                                -- @parameter@ /must/ be a valid 'PerformanceParameterTypeINTEL' value+                                -- #VUID-vkGetPerformanceParameterINTEL-parameter-parameter# @parameter@+                                -- /must/ be a valid 'PerformanceParameterTypeINTEL' value                                 PerformanceParameterTypeINTEL                              -> io (PerformanceValueINTEL) getPerformanceParameterINTEL device parameter = liftIO . evalContT $ do@@ -693,11 +720,12 @@ -- -- == Valid Usage (Implicit) ----- -   @type@ /must/ be a valid 'PerformanceValueTypeINTEL' value+-- -   #VUID-VkPerformanceValueINTEL-type-parameter# @type@ /must/ be a+--     valid 'PerformanceValueTypeINTEL' value ----- -   If @type@ is 'PERFORMANCE_VALUE_TYPE_STRING_INTEL', the---     @valueString@ member of @data@ /must/ be a null-terminated UTF-8---     string+-- -   #VUID-VkPerformanceValueINTEL-valueString-parameter# If @type@ is+--     'PERFORMANCE_VALUE_TYPE_STRING_INTEL', the @valueString@ member of+--     @data@ /must/ be a null-terminated UTF-8 string -- -- = See Also --@@ -814,6 +842,7 @@   { -- | @performanceCountersSampling@ describe how performance queries should be     -- captured.     --+    -- #VUID-VkQueryPoolPerformanceQueryCreateInfoINTEL-performanceCountersSampling-parameter#     -- @performanceCountersSampling@ /must/ be a valid     -- 'QueryPoolSamplingModeINTEL' value     performanceCountersSampling :: QueryPoolSamplingModeINTEL }@@ -910,16 +939,19 @@ -- -- == Valid Usage ----- -   The value written by the application into @marker@ /must/ only used---     the valid bits as reported by 'getPerformanceParameterINTEL' with---     the 'PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL'+-- -   #VUID-VkPerformanceStreamMarkerInfoINTEL-marker-02735# The value+--     written by the application into @marker@ /must/ only used the valid+--     bits as reported by 'getPerformanceParameterINTEL' with the+--     'PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPerformanceStreamMarkerInfoINTEL-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkPerformanceStreamMarkerInfoINTEL-pNext-pNext# @pNext@ /must/+--     be @NULL@ -- -- = See Also --@@ -979,7 +1011,8 @@ data PerformanceOverrideInfoINTEL = PerformanceOverrideInfoINTEL   { -- | @type@ is the particular 'PerformanceOverrideTypeINTEL' to set.     ---    -- @type@ /must/ be a valid 'PerformanceOverrideTypeINTEL' value+    -- #VUID-VkPerformanceOverrideInfoINTEL-type-parameter# @type@ /must/ be a+    -- valid 'PerformanceOverrideTypeINTEL' value     type' :: PerformanceOverrideTypeINTEL   , -- | @enable@ defines whether the override is enabled.     enable :: Bool@@ -1046,7 +1079,8 @@   { -- | @type@ is one of the 'PerformanceConfigurationTypeINTEL' type of     -- performance configuration that will be acquired.     ---    -- @type@ /must/ be a valid 'PerformanceConfigurationTypeINTEL' value+    -- #VUID-VkPerformanceConfigurationAcquireInfoINTEL-type-parameter# @type@+    -- /must/ be a valid 'PerformanceConfigurationTypeINTEL' value     type' :: PerformanceConfigurationTypeINTEL }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_INTEL_shader_integer_functions2.hs view
@@ -54,8 +54,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL-  { -- | @shaderIntegerFunctions2@ indicates that the implementation supports the-    -- @IntegerFunctions2INTEL@ SPIR-V capability.+  { -- | #features-shaderIntegerFunctions2# @shaderIntegerFunctions2@ indicates+    -- that the implementation supports the @IntegerFunctions2INTEL@ SPIR-V+    -- capability.     shaderIntegerFunctions2 :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_KHR_android_surface.hs view
@@ -109,16 +109,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateAndroidSurfaceKHR-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'AndroidSurfaceCreateInfoKHR' structure+-- -   #VUID-vkCreateAndroidSurfaceKHR-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'AndroidSurfaceCreateInfoKHR'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateAndroidSurfaceKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSurface@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateAndroidSurfaceKHR-pSurface-parameter# @pSurface@+--     /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes@@ -181,12 +185,14 @@ data AndroidSurfaceCreateInfoKHR = AndroidSurfaceCreateInfoKHR   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkAndroidSurfaceCreateInfoKHR-flags-zerobitmask# @flags@ /must/ be+    -- @0@     flags :: AndroidSurfaceCreateFlagsKHR   , -- | @window@ is a pointer to the 'ANativeWindow' to associate the surface     -- with.     ---    -- @window@ /must/ point to a valid Android 'ANativeWindow'+    -- #VUID-VkAndroidSurfaceCreateInfoKHR-window-01248# @window@ /must/ point+    -- to a valid Android 'ANativeWindow'     window :: Ptr ANativeWindow   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_KHR_copy_commands2.hs view
@@ -121,2646 +121,2849 @@ -- -- == Valid Usage ----- -   If @commandBuffer@ is an unprotected command buffer, then---     @srcBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is an unprotected command buffer, then---     @dstBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@---     /must/ not be an unprotected buffer------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pCopyBufferInfo@ /must/ be a valid pointer to a valid---     'CopyBufferInfo2KHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'CopyBufferInfo2KHR'-cmdCopyBuffer2KHR :: forall io-                   . (MonadIO io)-                  => -- | @commandBuffer@ is the command buffer into which the command will be-                     -- recorded.-                     CommandBuffer-                  -> -- | @pCopyBufferInfo@ is a pointer to a 'CopyBufferInfo2KHR' structure-                     -- describing the copy parameters.-                     CopyBufferInfo2KHR-                  -> io ()-cmdCopyBuffer2KHR commandBuffer copyBufferInfo = liftIO . evalContT $ do-  let vkCmdCopyBuffer2KHRPtr = pVkCmdCopyBuffer2KHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyBuffer2KHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBuffer2KHR is null" Nothing Nothing-  let vkCmdCopyBuffer2KHR' = mkVkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHRPtr-  pCopyBufferInfo <- ContT $ withCStruct (copyBufferInfo)-  lift $ vkCmdCopyBuffer2KHR' (commandBufferHandle (commandBuffer)) pCopyBufferInfo-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyImage2KHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyImageInfo2KHR -> IO ()---- | vkCmdCopyImage2KHR - Copy data between images------ = Description------ This command is functionally identical to--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage', but includes--- extensible sub-structures that include @sType@ and @pNext@ parameters,--- allowing them to be more easily extended.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @dstImage@---     /must/ not be an unprotected image------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pCopyImageInfo@ /must/ be a valid pointer to a valid---     'CopyImageInfo2KHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'CopyImageInfo2KHR'-cmdCopyImage2KHR :: forall io-                  . (MonadIO io)-                 => -- | @commandBuffer@ is the command buffer into which the command will be-                    -- recorded.-                    CommandBuffer-                 -> -- | @pCopyImageInfo@ is a pointer to a 'CopyImageInfo2KHR' structure-                    -- describing the copy parameters.-                    CopyImageInfo2KHR-                 -> io ()-cmdCopyImage2KHR commandBuffer copyImageInfo = liftIO . evalContT $ do-  let vkCmdCopyImage2KHRPtr = pVkCmdCopyImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyImage2KHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImage2KHR is null" Nothing Nothing-  let vkCmdCopyImage2KHR' = mkVkCmdCopyImage2KHR vkCmdCopyImage2KHRPtr-  pCopyImageInfo <- ContT $ withCStruct (copyImageInfo)-  lift $ vkCmdCopyImage2KHR' (commandBufferHandle (commandBuffer)) pCopyImageInfo-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBlitImage2KHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr BlitImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr BlitImageInfo2KHR -> IO ()---- | vkCmdBlitImage2KHR - Copy regions of an image, potentially performing--- format conversion,------ = Description------ This command is functionally identical to--- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage', but includes--- extensible sub-structures that include @sType@ and @pNext@ parameters,--- allowing them to be more easily extended.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @dstImage@---     /must/ not be an unprotected image------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pBlitImageInfo@ /must/ be a valid pointer to a valid---     'BlitImageInfo2KHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'BlitImageInfo2KHR', 'Vulkan.Core10.Handles.CommandBuffer'-cmdBlitImage2KHR :: forall io-                  . (MonadIO io)-                 => -- | @commandBuffer@ is the command buffer into which the command will be-                    -- recorded.-                    CommandBuffer-                 -> -- | @pBlitImageInfo@ is a pointer to a 'BlitImageInfo2KHR' structure-                    -- describing the blit parameters.-                    BlitImageInfo2KHR-                 -> io ()-cmdBlitImage2KHR commandBuffer blitImageInfo = liftIO . evalContT $ do-  let vkCmdBlitImage2KHRPtr = pVkCmdBlitImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdBlitImage2KHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBlitImage2KHR is null" Nothing Nothing-  let vkCmdBlitImage2KHR' = mkVkCmdBlitImage2KHR vkCmdBlitImage2KHRPtr-  pBlitImageInfo <- ContT $ withCStruct (blitImageInfo)-  lift $ vkCmdBlitImage2KHR' (commandBufferHandle (commandBuffer)) pBlitImageInfo-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyBufferToImage2KHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyBufferToImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyBufferToImageInfo2KHR -> IO ()---- | vkCmdCopyBufferToImage2KHR - Copy data from a buffer into an image------ = Description------ This command is functionally identical to--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', but includes--- extensible sub-structures that include @sType@ and @pNext@ parameters,--- allowing them to be more easily extended.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then---     @srcBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @dstImage@---     /must/ not be an unprotected image------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pCopyBufferToImageInfo@ /must/ be a valid pointer to a valid---     'CopyBufferToImageInfo2KHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'CopyBufferToImageInfo2KHR'-cmdCopyBufferToImage2KHR :: forall io-                          . (MonadIO io)-                         => -- | @commandBuffer@ is the command buffer into which the command will be-                            -- recorded.-                            CommandBuffer-                         -> -- | @pCopyBufferToImageInfo@ is a pointer to a 'CopyBufferToImageInfo2KHR'-                            -- structure describing the copy parameters.-                            CopyBufferToImageInfo2KHR-                         -> io ()-cmdCopyBufferToImage2KHR commandBuffer copyBufferToImageInfo = liftIO . evalContT $ do-  let vkCmdCopyBufferToImage2KHRPtr = pVkCmdCopyBufferToImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyBufferToImage2KHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBufferToImage2KHR is null" Nothing Nothing-  let vkCmdCopyBufferToImage2KHR' = mkVkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHRPtr-  pCopyBufferToImageInfo <- ContT $ withCStruct (copyBufferToImageInfo)-  lift $ vkCmdCopyBufferToImage2KHR' (commandBufferHandle (commandBuffer)) pCopyBufferToImageInfo-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyImageToBuffer2KHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyImageToBufferInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyImageToBufferInfo2KHR -> IO ()---- | vkCmdCopyImageToBuffer2KHR - Copy image data into a buffer------ = Description------ This command is functionally identical to--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer', but includes--- extensible sub-structures that include @sType@ and @pNext@ parameters,--- allowing them to be more easily extended.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is an unprotected command buffer, then---     @dstBuffer@ /must/ not be a protected buffer------ -   If @commandBuffer@ is a protected command buffer, then @dstBuffer@---     /must/ not be an unprotected buffer------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pCopyImageToBufferInfo@ /must/ be a valid pointer to a valid---     'CopyImageToBufferInfo2KHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support transfer, graphics, or compute---     operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |--- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'CopyImageToBufferInfo2KHR'-cmdCopyImageToBuffer2KHR :: forall io-                          . (MonadIO io)-                         => -- | @commandBuffer@ is the command buffer into which the command will be-                            -- recorded.-                            CommandBuffer-                         -> -- | @pCopyImageToBufferInfo@ is a pointer to a 'cmdCopyImageToBuffer2KHR'-                            -- structure describing the copy parameters.-                            CopyImageToBufferInfo2KHR-                         -> io ()-cmdCopyImageToBuffer2KHR commandBuffer copyImageToBufferInfo = liftIO . evalContT $ do-  let vkCmdCopyImageToBuffer2KHRPtr = pVkCmdCopyImageToBuffer2KHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyImageToBuffer2KHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImageToBuffer2KHR is null" Nothing Nothing-  let vkCmdCopyImageToBuffer2KHR' = mkVkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHRPtr-  pCopyImageToBufferInfo <- ContT $ withCStruct (copyImageToBufferInfo)-  lift $ vkCmdCopyImageToBuffer2KHR' (commandBufferHandle (commandBuffer)) pCopyImageToBufferInfo-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdResolveImage2KHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr ResolveImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr ResolveImageInfo2KHR -> IO ()---- | vkCmdResolveImage2KHR - Resolve regions of an image------ = Description------ This command is functionally identical to--- 'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage', but includes--- extensible sub-structures that include @sType@ and @pNext@ parameters,--- allowing them to be more easily extended.------ == Valid Usage------ -   If @commandBuffer@ is an unprotected command buffer, then @srcImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is an unprotected command buffer, then @dstImage@---     /must/ not be a protected image------ -   If @commandBuffer@ is a protected command buffer, then @dstImage@---     /must/ not be an unprotected image------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pResolveImageInfo@ /must/ be a valid pointer to a valid---     'ResolveImageInfo2KHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support graphics operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'ResolveImageInfo2KHR'-cmdResolveImage2KHR :: forall io-                     . (MonadIO io)-                    => -- | @commandBuffer@ is the command buffer into which the command will be-                       -- recorded.-                       CommandBuffer-                    -> -- | @pResolveImageInfo@ is a pointer to a 'ResolveImageInfo2KHR' structure-                       -- describing the resolve parameters.-                       ResolveImageInfo2KHR-                    -> io ()-cmdResolveImage2KHR commandBuffer resolveImageInfo = liftIO . evalContT $ do-  let vkCmdResolveImage2KHRPtr = pVkCmdResolveImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdResolveImage2KHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResolveImage2KHR is null" Nothing Nothing-  let vkCmdResolveImage2KHR' = mkVkCmdResolveImage2KHR vkCmdResolveImage2KHRPtr-  pResolveImageInfo <- ContT $ withCStruct (resolveImageInfo)-  lift $ vkCmdResolveImage2KHR' (commandBufferHandle (commandBuffer)) pResolveImageInfo-  pure $ ()----- | VkBufferCopy2KHR - Structure specifying a buffer copy operation------ == Valid Usage------ -   The @size@ /must/ be greater than @0@------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_COPY_2_KHR'------ -   @pNext@ /must/ be @NULL@------ = See Also------ 'CopyBufferInfo2KHR', 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data BufferCopy2KHR = BufferCopy2KHR-  { -- | @srcOffset@ is the starting offset in bytes from the start of-    -- @srcBuffer@.-    srcOffset :: DeviceSize-  , -- | @dstOffset@ is the starting offset in bytes from the start of-    -- @dstBuffer@.-    dstOffset :: DeviceSize-  , -- | @size@ is the number of bytes to copy.-    size :: DeviceSize-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (BufferCopy2KHR)-#endif-deriving instance Show BufferCopy2KHR--instance ToCStruct BufferCopy2KHR where-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p BufferCopy2KHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_COPY_2_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (srcOffset)-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (dstOffset)-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (size)-    f-  cStructSize = 40-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_COPY_2_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)-    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)-    f--instance FromCStruct BufferCopy2KHR where-  peekCStruct p = do-    srcOffset <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))-    dstOffset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))-    size <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))-    pure $ BufferCopy2KHR-             srcOffset dstOffset size--instance Storable BufferCopy2KHR where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero BufferCopy2KHR where-  zero = BufferCopy2KHR-           zero-           zero-           zero----- | VkImageCopy2KHR - Structure specifying an image copy operation------ == Valid Usage------ -   The number of slices of the @extent@ (for 3D) or layers of the---     @srcSubresource@ (for non-3D) /must/ match the number of slices of---     the @extent@ (for 3D) or layers of the @dstSubresource@ (for non-3D)------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_COPY_2_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @srcSubresource@ /must/ be a valid---     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'---     structure------ -   @dstSubresource@ /must/ be a valid---     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'---     structure------ = See Also------ 'CopyImageInfo2KHR', 'Vulkan.Core10.FundamentalTypes.Extent3D',--- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',--- 'Vulkan.Core10.FundamentalTypes.Offset3D',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data ImageCopy2KHR = ImageCopy2KHR-  { -- | @srcSubresource@ and @dstSubresource@ are-    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' structures-    -- specifying the image subresources of the images used for the source and-    -- destination image data, respectively.-    srcSubresource :: ImageSubresourceLayers-  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets-    -- in texels of the sub-regions of the source and destination image data.-    srcOffset :: Offset3D-  , -- No documentation found for Nested "VkImageCopy2KHR" "dstSubresource"-    dstSubresource :: ImageSubresourceLayers-  , -- No documentation found for Nested "VkImageCopy2KHR" "dstOffset"-    dstOffset :: Offset3D-  , -- | @extent@ is the size in texels of the image to copy in @width@, @height@-    -- and @depth@.-    extent :: Extent3D-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ImageCopy2KHR)-#endif-deriving instance Show ImageCopy2KHR--instance ToCStruct ImageCopy2KHR where-  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ImageCopy2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_COPY_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (srcOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (dstOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (extent) . ($ ())-    lift $ f-  cStructSize = 88-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_COPY_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (zero) . ($ ())-    lift $ f--instance FromCStruct ImageCopy2KHR where-  peekCStruct p = do-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))-    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers))-    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 60 :: Ptr Offset3D))-    extent <- peekCStruct @Extent3D ((p `plusPtr` 72 :: Ptr Extent3D))-    pure $ ImageCopy2KHR-             srcSubresource srcOffset dstSubresource dstOffset extent--instance Zero ImageCopy2KHR where-  zero = ImageCopy2KHR-           zero-           zero-           zero-           zero-           zero----- | VkImageBlit2KHR - Structure specifying an image blit operation------ = Description------ For each element of the @pRegions@ array, a blit operation is performed--- for the specified source and destination regions.------ == Valid Usage------ -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@---     /must/ match------ -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@---     /must/ match------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_BLIT_2_KHR'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @srcSubresource@ /must/ be a valid---     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'---     structure------ -   @dstSubresource@ /must/ be a valid---     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'---     structure------ = See Also------ 'BlitImageInfo2KHR',--- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',--- 'Vulkan.Core10.FundamentalTypes.Offset3D',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data ImageBlit2KHR (es :: [Type]) = ImageBlit2KHR-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @srcSubresource@ is the subresource to blit from.-    srcSubresource :: ImageSubresourceLayers-  , -- | @srcOffsets@ is a pointer to an array of two-    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the-    -- bounds of the source region within @srcSubresource@.-    srcOffsets :: (Offset3D, Offset3D)-  , -- | @dstSubresource@ is the subresource to blit into.-    dstSubresource :: ImageSubresourceLayers-  , -- | @dstOffsets@ is a pointer to an array of two-    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the-    -- bounds of the destination region within @dstSubresource@.-    dstOffsets :: (Offset3D, Offset3D)-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ImageBlit2KHR (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (ImageBlit2KHR es)--instance Extensible ImageBlit2KHR where-  extensibleType = STRUCTURE_TYPE_IMAGE_BLIT_2_KHR-  setNext x next = x{next = next}-  getNext ImageBlit2KHR{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageBlit2KHR e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @CopyCommandTransformInfoQCOM = Just f-    | otherwise = Nothing--instance (Extendss ImageBlit2KHR es, PokeChain es) => ToCStruct (ImageBlit2KHR es) where-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ImageBlit2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_BLIT_2_KHR)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())-    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))-    case (srcOffsets) of-      (e0, e1) -> do-        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())-        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())-    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))-    case (dstOffsets) of-      (e0, e1) -> do-        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())-        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())-    lift $ f-  cStructSize = 96-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_BLIT_2_KHR)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))-    case ((zero, zero)) of-      (e0, e1) -> do-        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())-        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))-    case ((zero, zero)) of-      (e0, e1) -> do-        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())-        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())-    lift $ f--instance (Extendss ImageBlit2KHR es, PeekChain es) => FromCStruct (ImageBlit2KHR es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))-    let psrcOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))-    srcOffsets0 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 0 :: Ptr Offset3D))-    srcOffsets1 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 12 :: Ptr Offset3D))-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers))-    let pdstOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))-    dstOffsets0 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 0 :: Ptr Offset3D))-    dstOffsets1 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 12 :: Ptr Offset3D))-    pure $ ImageBlit2KHR-             next srcSubresource ((srcOffsets0, srcOffsets1)) dstSubresource ((dstOffsets0, dstOffsets1))--instance es ~ '[] => Zero (ImageBlit2KHR es) where-  zero = ImageBlit2KHR-           ()-           zero-           (zero, zero)-           zero-           (zero, zero)----- | VkBufferImageCopy2KHR - Structure specifying a buffer image copy--- operation------ = Description------ This structure is functionally identical to--- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy', but adds @sType@--- and @pNext@ parameters, allowing it to be more easily extended.------ == Valid Usage------ -   @bufferRowLength@ /must/ be @0@, or greater than or equal to the---     @width@ member of @imageExtent@------ -   @bufferImageHeight@ /must/ be @0@, or greater than or equal to the---     @height@ member of @imageExtent@------ -   The @aspectMask@ member of @imageSubresource@ /must/ only have a---     single bit set------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @imageSubresource@ /must/ be a valid---     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'---     structure------ = See Also------ 'CopyBufferToImageInfo2KHR', 'CopyImageToBufferInfo2KHR',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.FundamentalTypes.Extent3D',--- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',--- 'Vulkan.Core10.FundamentalTypes.Offset3D',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data BufferImageCopy2KHR (es :: [Type]) = BufferImageCopy2KHR-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @bufferOffset@ is the offset in bytes from the start of the buffer-    -- object where the image data is copied from or to.-    bufferOffset :: DeviceSize-  , -- | @bufferRowLength@ and @bufferImageHeight@ specify in texels a subregion-    -- of a larger two- or three-dimensional image in buffer memory, and-    -- control the addressing calculations. If either of these values is zero,-    -- that aspect of the buffer memory is considered to be tightly packed-    -- according to the @imageExtent@.-    bufferRowLength :: Word32-  , -- No documentation found for Nested "VkBufferImageCopy2KHR" "bufferImageHeight"-    bufferImageHeight :: Word32-  , -- | @imageSubresource@ is a-    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' used to-    -- specify the specific image subresources of the image used for the source-    -- or destination image data.-    imageSubresource :: ImageSubresourceLayers-  , -- | @imageOffset@ selects the initial @x@, @y@, @z@ offsets in texels of the-    -- sub-region of the source or destination image data.-    imageOffset :: Offset3D-  , -- | @imageExtent@ is the size in texels of the image to copy in @width@,-    -- @height@ and @depth@.-    imageExtent :: Extent3D-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (BufferImageCopy2KHR (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (BufferImageCopy2KHR es)--instance Extensible BufferImageCopy2KHR where-  extensibleType = STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR-  setNext x next = x{next = next}-  getNext BufferImageCopy2KHR{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BufferImageCopy2KHR e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @CopyCommandTransformInfoQCOM = Just f-    | otherwise = Nothing--instance (Extendss BufferImageCopy2KHR es, PokeChain es) => ToCStruct (BufferImageCopy2KHR es) where-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p BufferImageCopy2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (bufferOffset)-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (bufferRowLength)-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (bufferImageHeight)-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers)) (imageSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr Offset3D)) (imageOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent3D)) (imageExtent) . ($ ())-    lift $ f-  cStructSize = 72-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)-    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent3D)) (zero) . ($ ())-    lift $ f--instance (Extendss BufferImageCopy2KHR es, PeekChain es) => FromCStruct (BufferImageCopy2KHR es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    bufferOffset <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))-    bufferRowLength <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))-    bufferImageHeight <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))-    imageSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers))-    imageOffset <- peekCStruct @Offset3D ((p `plusPtr` 48 :: Ptr Offset3D))-    imageExtent <- peekCStruct @Extent3D ((p `plusPtr` 60 :: Ptr Extent3D))-    pure $ BufferImageCopy2KHR-             next bufferOffset bufferRowLength bufferImageHeight imageSubresource imageOffset imageExtent--instance es ~ '[] => Zero (BufferImageCopy2KHR es) where-  zero = BufferImageCopy2KHR-           ()-           zero-           zero-           zero-           zero-           zero-           zero----- | VkImageResolve2KHR - Structure specifying an image resolve operation------ == Valid Usage------ -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@---     /must/ only contain---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@---     /must/ match------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @srcSubresource@ /must/ be a valid---     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'---     structure------ -   @dstSubresource@ /must/ be a valid---     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'---     structure------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Extent3D',--- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',--- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'ResolveImageInfo2KHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data ImageResolve2KHR = ImageResolve2KHR-  { -- | @srcSubresource@ and @dstSubresource@ are-    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' structures-    -- specifying the image subresources of the images used for the source and-    -- destination image data, respectively. Resolve of depth\/stencil images-    -- is not supported.-    srcSubresource :: ImageSubresourceLayers-  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets-    -- in texels of the sub-regions of the source and destination image data.-    srcOffset :: Offset3D-  , -- No documentation found for Nested "VkImageResolve2KHR" "dstSubresource"-    dstSubresource :: ImageSubresourceLayers-  , -- No documentation found for Nested "VkImageResolve2KHR" "dstOffset"-    dstOffset :: Offset3D-  , -- | @extent@ is the size in texels of the source image to resolve in-    -- @width@, @height@ and @depth@.-    extent :: Extent3D-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (ImageResolve2KHR)-#endif-deriving instance Show ImageResolve2KHR--instance ToCStruct ImageResolve2KHR where-  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p ImageResolve2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (srcOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (dstOffset) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (extent) . ($ ())-    lift $ f-  cStructSize = 88-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (zero) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (zero) . ($ ())-    lift $ f--instance FromCStruct ImageResolve2KHR where-  peekCStruct p = do-    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))-    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))-    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers))-    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 60 :: Ptr Offset3D))-    extent <- peekCStruct @Extent3D ((p `plusPtr` 72 :: Ptr Extent3D))-    pure $ ImageResolve2KHR-             srcSubresource srcOffset dstSubresource dstOffset extent--instance Zero ImageResolve2KHR where-  zero = ImageResolve2KHR-           zero-           zero-           zero-           zero-           zero----- | VkCopyBufferInfo2KHR - Structure specifying parameters of a buffer copy--- command------ = Description------ Members defined by this structure with the same name as parameters in--- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer' have the identical--- effect to those parameters; the child structure 'BufferCopy2KHR' is a--- variant of 'Vulkan.Core10.CommandBufferBuilding.BufferCopy' which--- includes @sType@ and @pNext@ parameters, allowing it to be extended.------ == Valid Usage------ -   The @srcOffset@ member of each element of @pRegions@ /must/ be less---     than the size of @srcBuffer@------ -   The @dstOffset@ member of each element of @pRegions@ /must/ be less---     than the size of @dstBuffer@------ -   The @size@ member of each element of @pRegions@ /must/ be less than---     or equal to the size of @srcBuffer@ minus @srcOffset@------ -   The @size@ member of each element of @pRegions@ /must/ be less than---     or equal to the size of @dstBuffer@ minus @dstOffset@------ -   The union of the source regions, and the union of the destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   @srcBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @srcBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'BufferCopy2KHR' structures------ -   @regionCount@ /must/ be greater than @0@------ -   Both of @dstBuffer@, and @srcBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'BufferCopy2KHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdCopyBuffer2KHR'-data CopyBufferInfo2KHR = CopyBufferInfo2KHR-  { -- | @srcBuffer@ is the source buffer.-    srcBuffer :: Buffer-  , -- | @dstBuffer@ is the destination buffer.-    dstBuffer :: Buffer-  , -- | @pRegions@ is a pointer to an array of 'BufferCopy2KHR' structures-    -- specifying the regions to copy.-    regions :: Vector BufferCopy2KHR-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (CopyBufferInfo2KHR)-#endif-deriving instance Show CopyBufferInfo2KHR--instance ToCStruct CopyBufferInfo2KHR where-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p CopyBufferInfo2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (srcBuffer)-    lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (dstBuffer)-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))-    pPRegions' <- ContT $ allocaBytesAligned @BufferCopy2KHR ((Data.Vector.length (regions)) * 40) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (40 * (i)) :: Ptr BufferCopy2KHR) (e) . ($ ())) (regions)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR))) (pPRegions')-    lift $ f-  cStructSize = 48-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero)-    pPRegions' <- ContT $ allocaBytesAligned @BufferCopy2KHR ((Data.Vector.length (mempty)) * 40) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (40 * (i)) :: Ptr BufferCopy2KHR) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR))) (pPRegions')-    lift $ f--instance FromCStruct CopyBufferInfo2KHR where-  peekCStruct p = do-    srcBuffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))-    dstBuffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))-    regionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))-    pRegions <- peek @(Ptr BufferCopy2KHR) ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR)))-    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @BufferCopy2KHR ((pRegions `advancePtrBytes` (40 * (i)) :: Ptr BufferCopy2KHR)))-    pure $ CopyBufferInfo2KHR-             srcBuffer dstBuffer pRegions'--instance Zero CopyBufferInfo2KHR where-  zero = CopyBufferInfo2KHR-           zero-           zero-           mempty----- | VkCopyImageInfo2KHR - Structure specifying parameters of an image copy--- command------ == Valid Usage------ -   The union of all source regions, and the union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'------ -   @srcImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   If @srcImage@ is non-sparse then the image or /disjoint/ plane to be---     copied /must/ be bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   @srcImageLayout@ /must/ specify the layout of the image subresources---     of @srcImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @srcImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @dstImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ -   @dstImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstImage@ is non-sparse then the image or /disjoint/ plane that---     is the destination of the copy /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImageLayout@ /must/ specify the layout of the image subresources---     of @dstImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @dstImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   If the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and---     @dstImage@ is not a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and---     @dstImage@ /must/ be compatible, as defined---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>------ -   In a copy to or from a plane of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,---     the 'Vulkan.Core10.Enums.Format.Format' of the image and plane---     /must/ be compatible according to---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>---     for the plane being copied------ -   The sample count of @srcImage@ and @dstImage@ /must/ match------ -   The @srcSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @dstSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @srcImage@ was created------ -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @dstImage@ was created------ -   The @srcOffset@ and @extent@ members of each element of @pRegions@---     /must/ respect the image transfer granularity requirements of---     @commandBuffer@’s command pool’s queue family, as described in---     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ -   The @dstOffset@ and @extent@ members of each element of @pRegions@---     /must/ respect the image transfer granularity requirements of---     @commandBuffer@’s command pool’s queue family, as described in---     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@---     containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If neither @srcImage@ nor @dstImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>---     then for each element of @pRegions@, @srcSubresource.aspectMask@ and---     @dstSubresource.aspectMask@ /must/ match------ -   If @srcImage@ has a 'Vulkan.Core10.Enums.Format.Format' with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>---     then for each element of @pRegions@, @srcSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'------ -   If @srcImage@ has a 'Vulkan.Core10.Enums.Format.Format' with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>---     then for each element of @pRegions@, @srcSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'------ -   If @dstImage@ has a 'Vulkan.Core10.Enums.Format.Format' with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>---     then for each element of @pRegions@, @dstSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'------ -   If @dstImage@ has a 'Vulkan.Core10.Enums.Format.Format' with---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>---     then for each element of @pRegions@, @dstSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'------ -   If @srcImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>---     and the @dstImage@ does not have a multi-planar image format, then---     for each element of @pRegions@, @dstSubresource.aspectMask@ /must/---     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ -   If @dstImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>---     and the @srcImage@ does not have a multi-planar image format, then---     for each element of @pRegions@, @srcSubresource.aspectMask@ /must/---     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and and---     @srcSubresource.layerCount@ /must/ be @1@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and and---     @dstSubresource.layerCount@ /must/ be @1@------ -   For each element of @pRegions@, @srcSubresource.aspectMask@ /must/---     specify aspects present in @srcImage@------ -   For each element of @pRegions@, @dstSubresource.aspectMask@ /must/---     specify aspects present in @dstImage@------ -   For each element of @pRegions@, @srcOffset.x@ and (@extent.width@ +---     @srcOffset.x@) /must/ both be greater than or equal to @0@ and less---     than or equal to the width of the specified @srcSubresource@ of---     @srcImage@------ -   For each element of @pRegions@, @srcOffset.y@ and (@extent.height@ +---     @srcOffset.y@) /must/ both be greater than or equal to @0@ and less---     than or equal to the height of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@---     /must/ be @1@------ -   For each element of @pRegions@, @srcOffset.z@ and (@extent.depth@ +---     @srcOffset.z@) /must/ both be greater than or equal to @0@ and less---     than or equal to the depth of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/---     be @1@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/---     be @1@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @srcOffset.z@ /must/ be @0@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @dstOffset.z@ /must/ be @0@------ -   If @srcImage@ and @dstImage@ are both of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @extent.depth@ /must/ be @1@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @dstImage@ is of---     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each---     element of @pRegions@, @extent.depth@ /must/ equal---     @srcSubresource.layerCount@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @srcImage@ is of---     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each---     element of @pRegions@, @extent.depth@ /must/ equal---     @dstSubresource.layerCount@------ -   For each element of @pRegions@, @dstOffset.x@ and (@extent.width@ +---     @dstOffset.x@) /must/ both be greater than or equal to @0@ and less---     than or equal to the width of the specified @dstSubresource@ of---     @dstImage@------ -   For each element of @pRegions@, @dstOffset.y@ and (@extent.height@ +---     @dstOffset.y@) /must/ both be greater than or equal to @0@ and less---     than or equal to the height of the specified @dstSubresource@ of---     @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@---     /must/ be @1@------ -   For each element of @pRegions@, @dstOffset.z@ and (@extent.depth@ +---     @dstOffset.z@) /must/ both be greater than or equal to @0@ and less---     than or equal to the depth of the specified @dstSubresource@ of---     @dstImage@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, all members of @srcOffset@---     /must/ be a multiple of the corresponding dimensions of the---     compressed texel block------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.width@ /must/ be a---     multiple of the compressed texel block width or (@extent.width@ +---     @srcOffset.x@) /must/ equal the width of the specified---     @srcSubresource@ of @srcImage@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.height@ /must/ be a---     multiple of the compressed texel block height or (@extent.height@ +---     @srcOffset.y@) /must/ equal the height of the specified---     @srcSubresource@ of @srcImage@------ -   If @srcImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.depth@ /must/ be a---     multiple of the compressed texel block depth or (@extent.depth@ +---     @srcOffset.z@) /must/ equal the depth of the specified---     @srcSubresource@ of @srcImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, all members of @dstOffset@---     /must/ be a multiple of the corresponding dimensions of the---     compressed texel block------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.width@ /must/ be a---     multiple of the compressed texel block width or (@extent.width@ +---     @dstOffset.x@) /must/ equal the width of the specified---     @dstSubresource@ of @dstImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.height@ /must/ be a---     multiple of the compressed texel block height or (@extent.height@ +---     @dstOffset.y@) /must/ equal the height of the specified---     @dstSubresource@ of @dstImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     then for each element of @pRegions@, @extent.depth@ /must/ be a---     multiple of the compressed texel block depth or (@extent.depth@ +---     @dstOffset.z@) /must/ equal the depth of the specified---     @dstSubresource@ of @dstImage@------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @srcImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @dstImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'ImageCopy2KHR' structures------ -   @regionCount@ /must/ be greater than @0@------ -   Both of @dstImage@, and @srcImage@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Core10.Handles.Image', 'ImageCopy2KHR',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',--- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdCopyImage2KHR'-data CopyImageInfo2KHR = CopyImageInfo2KHR-  { -- | @srcImage@ is the source image.-    srcImage :: Image-  , -- | @srcImageLayout@ is the current layout of the source image subresource.-    srcImageLayout :: ImageLayout-  , -- | @dstImage@ is the destination image.-    dstImage :: Image-  , -- | @dstImageLayout@ is the current layout of the destination image-    -- subresource.-    dstImageLayout :: ImageLayout-  , -- | @pRegions@ is a pointer to an array of 'ImageCopy2KHR' structures-    -- specifying the regions to copy.-    regions :: Vector ImageCopy2KHR-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (CopyImageInfo2KHR)-#endif-deriving instance Show CopyImageInfo2KHR--instance ToCStruct CopyImageInfo2KHR where-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p CopyImageInfo2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)-    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (dstImage)-    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (dstImageLayout)-    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))-    pPRegions' <- ContT $ allocaBytesAligned @ImageCopy2KHR ((Data.Vector.length (regions)) * 88) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (88 * (i)) :: Ptr ImageCopy2KHR) (e) . ($ ())) (regions)-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR))) (pPRegions')-    lift $ f-  cStructSize = 56-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)-    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (zero)-    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (zero)-    pPRegions' <- ContT $ allocaBytesAligned @ImageCopy2KHR ((Data.Vector.length (mempty)) * 88) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (88 * (i)) :: Ptr ImageCopy2KHR) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR))) (pPRegions')-    lift $ f--instance FromCStruct CopyImageInfo2KHR where-  peekCStruct p = do-    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))-    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))-    dstImage <- peek @Image ((p `plusPtr` 32 :: Ptr Image))-    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 40 :: Ptr ImageLayout))-    regionCount <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))-    pRegions <- peek @(Ptr ImageCopy2KHR) ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR)))-    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @ImageCopy2KHR ((pRegions `advancePtrBytes` (88 * (i)) :: Ptr ImageCopy2KHR)))-    pure $ CopyImageInfo2KHR-             srcImage srcImageLayout dstImage dstImageLayout pRegions'--instance Zero CopyImageInfo2KHR where-  zero = CopyImageInfo2KHR-           zero-           zero-           zero-           zero-           mempty----- | VkBlitImageInfo2KHR - Structure specifying parameters of blit image--- command------ == Valid Usage------ -   [[VUID-{refpage}-pRegions-00215]] The source region specified by---     each element of @pRegions@ /must/ be a region that is contained---     within @srcImage@------ -   [[VUID-{refpage}-pRegions-00216]] The destination region specified---     by each element of @pRegions@ /must/ be a region that is contained---     within @dstImage@------ -   [[VUID-{refpage}-pRegions-00217]] The union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory with any texel that /may/ be sampled during the blit---     operation------ -   [[VUID-{refpage}-srcImage-01999]] The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'------ -   [[VUID-{refpage}-srcImage-01561]] @srcImage@ /must/ not use a format---     listed in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>------ -   [[VUID-{refpage}-srcImage-00219]] @srcImage@ /must/ have been---     created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   [[VUID-{refpage}-srcImage-00220]] If @srcImage@ is non-sparse then---     it /must/ be bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   [[VUID-{refpage}-srcImageLayout-00221]] @srcImageLayout@ /must/---     specify the layout of the image subresources of @srcImage@ specified---     in @pRegions@ at the time this command is executed on a---     'Vulkan.Core10.Handles.Device'------ -   [[VUID-{refpage}-srcImageLayout-01398]] @srcImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   [[VUID-{refpage}-dstImage-02000]] The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @dstImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'------ -   [[VUID-{refpage}-dstImage-01562]] @dstImage@ /must/ not use a format---     listed in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>------ -   [[VUID-{refpage}-dstImage-00224]] @dstImage@ /must/ have been---     created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   [[VUID-{refpage}-dstImage-00225]] If @dstImage@ is non-sparse then---     it /must/ be bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   [[VUID-{refpage}-dstImageLayout-00226]] @dstImageLayout@ /must/---     specify the layout of the image subresources of @dstImage@ specified---     in @pRegions@ at the time this command is executed on a---     'Vulkan.Core10.Handles.Device'------ -   [[VUID-{refpage}-dstImageLayout-01399]] @dstImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   [[VUID-{refpage}-srcImage-00229]] If either of @srcImage@ or---     @dstImage@ was created with a signed integer---     'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been---     created with a signed integer 'Vulkan.Core10.Enums.Format.Format'------ -   [[VUID-{refpage}-srcImage-00230]] If either of @srcImage@ or---     @dstImage@ was created with an unsigned integer---     'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been---     created with an unsigned integer 'Vulkan.Core10.Enums.Format.Format'------ -   [[VUID-{refpage}-srcImage-00231]] If either of @srcImage@ or---     @dstImage@ was created with a depth\/stencil format, the other---     /must/ have exactly the same format------ -   [[VUID-{refpage}-srcImage-00232]] If @srcImage@ was created with a---     depth\/stencil format, @filter@ /must/ be---     'Vulkan.Core10.Enums.Filter.FILTER_NEAREST'------ -   [[VUID-{refpage}-srcImage-00233]] @srcImage@ /must/ have been---     created with a @samples@ value of---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   [[VUID-{refpage}-dstImage-00234]] @dstImage@ /must/ have been---     created with a @samples@ value of---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   [[VUID-{refpage}-filter-02001]] If @filter@ is---     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', then the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   [[VUID-{refpage}-filter-02002]] If @filter@ is---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', then the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   [[VUID-{refpage}-filter-00237]] If @filter@ is---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', @srcImage@---     /must/ be of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'------ -   [[VUID-{refpage}-srcSubresource-01705]] The---     @srcSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   [[VUID-{refpage}-dstSubresource-01706]] The---     @dstSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   [[VUID-{refpage}-srcSubresource-01707]] The---     @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @srcImage@ was created------ -   [[VUID-{refpage}-dstSubresource-01708]] The---     @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @dstImage@ was created------ -   [[VUID-{refpage}-dstImage-02545]] @dstImage@ and @srcImage@ /must/---     not have been created with @flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   [[VUID-{refpage}-srcImage-00240]] If either @srcImage@ or @dstImage@---     is of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for---     each element of @pRegions@, @srcSubresource.baseArrayLayer@ and---     @dstSubresource.baseArrayLayer@ /must/ each be @0@, and---     @srcSubresource.layerCount@ and @dstSubresource.layerCount@ /must/---     each be @1@.------ -   [[VUID-{refpage}-aspectMask-00241]] For each element of @pRegions@,---     @srcSubresource.aspectMask@ /must/ specify aspects present in---     @srcImage@------ -   [[VUID-{refpage}-aspectMask-00242]] For each element of @pRegions@,---     @dstSubresource.aspectMask@ /must/ specify aspects present in---     @dstImage@------ -   [[VUID-{refpage}-srcOffset-00243]] For each element of @pRegions@,---     @srcOffset@[0].x and @srcOffset@[1].x /must/ both be greater than or---     equal to @0@ and less than or equal to the width of the specified---     @srcSubresource@ of @srcImage@------ -   [[VUID-{refpage}-srcOffset-00244]] For each element of @pRegions@,---     @srcOffset@[0].y and @srcOffset@[1].y /must/ both be greater than or---     equal to @0@ and less than or equal to the height of the specified---     @srcSubresource@ of @srcImage@------ -   [[VUID-{refpage}-srcImage-00245]] If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @srcOffset@[0].y /must/ be @0@ and @srcOffset@[1].y---     /must/ be @1@------ -   [[VUID-{refpage}-srcOffset-00246]] For each element of @pRegions@,---     @srcOffset@[0].z and @srcOffset@[1].z /must/ both be greater than or---     equal to @0@ and less than or equal to the depth of the specified---     @srcSubresource@ of @srcImage@------ -   [[VUID-{refpage}-srcImage-00247]] If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @srcOffset@[0].z /must/ be @0@ and @srcOffset@[1].z---     /must/ be @1@------ -   [[VUID-{refpage}-dstOffset-00248]] For each element of @pRegions@,---     @dstOffset@[0].x and @dstOffset@[1].x /must/ both be greater than or---     equal to @0@ and less than or equal to the width of the specified---     @dstSubresource@ of @dstImage@------ -   [[VUID-{refpage}-dstOffset-00249]] For each element of @pRegions@,---     @dstOffset@[0].y and @dstOffset@[1].y /must/ both be greater than or---     equal to @0@ and less than or equal to the height of the specified---     @dstSubresource@ of @dstImage@------ -   [[VUID-{refpage}-dstImage-00250]] If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @dstOffset@[0].y /must/ be @0@ and @dstOffset@[1].y---     /must/ be @1@------ -   [[VUID-{refpage}-dstOffset-00251]] For each element of @pRegions@,---     @dstOffset@[0].z and @dstOffset@[1].z /must/ both be greater than or---     equal to @0@ and less than or equal to the depth of the specified---     @dstSubresource@ of @dstImage@------ -   [[VUID-{refpage}-dstImage-00252]] If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @dstOffset@[0].z /must/ be @0@ and @dstOffset@[1].z---     /must/ be @1@------ -   If any element of @pRegions@ contains---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, then @srcImage@ and @dstImage@ /must/ not be a---     block-compressed image.------ -   If any element of @pRegions@ contains---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, then the @srcImage@ /must/ be of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and /must/ not be a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>.------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @srcImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @dstImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'ImageBlit2KHR' structures------ -   @filter@ /must/ be a valid 'Vulkan.Core10.Enums.Filter.Filter' value------ -   @regionCount@ /must/ be greater than @0@------ -   Both of @dstImage@, and @srcImage@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Core10.Enums.Filter.Filter', 'Vulkan.Core10.Handles.Image',--- 'ImageBlit2KHR', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',--- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdBlitImage2KHR'-data BlitImageInfo2KHR = BlitImageInfo2KHR-  { -- | @srcImage@ is the source image.-    srcImage :: Image-  , -- | @srcImageLayout@ is the layout of the source image subresources for the-    -- blit.-    srcImageLayout :: ImageLayout-  , -- | @dstImage@ is the destination image.-    dstImage :: Image-  , -- | @dstImageLayout@ is the layout of the destination image subresources for-    -- the blit.-    dstImageLayout :: ImageLayout-  , -- | @pRegions@ is a pointer to an array of 'ImageBlit2KHR' structures-    -- specifying the regions to blit.-    regions :: Vector (SomeStruct ImageBlit2KHR)-  , -- | @filter@ is a 'Vulkan.Core10.Enums.Filter.Filter' specifying the filter-    -- to apply if the blits require scaling.-    filter' :: Filter-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (BlitImageInfo2KHR)-#endif-deriving instance Show BlitImageInfo2KHR--instance ToCStruct BlitImageInfo2KHR where-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p BlitImageInfo2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)-    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (dstImage)-    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (dstImageLayout)-    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))-    pPRegions' <- ContT $ allocaBytesAligned @(ImageBlit2KHR _) ((Data.Vector.length (regions)) * 96) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (96 * (i)) :: Ptr (ImageBlit2KHR _))) (e) . ($ ())) (regions)-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (ImageBlit2KHR _)))) (pPRegions')-    lift $ poke ((p `plusPtr` 56 :: Ptr Filter)) (filter')-    lift $ f-  cStructSize = 64-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)-    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (zero)-    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (zero)-    pPRegions' <- ContT $ allocaBytesAligned @(ImageBlit2KHR _) ((Data.Vector.length (mempty)) * 96) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (96 * (i)) :: Ptr (ImageBlit2KHR _))) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (ImageBlit2KHR _)))) (pPRegions')-    lift $ poke ((p `plusPtr` 56 :: Ptr Filter)) (zero)-    lift $ f--instance FromCStruct BlitImageInfo2KHR where-  peekCStruct p = do-    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))-    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))-    dstImage <- peek @Image ((p `plusPtr` 32 :: Ptr Image))-    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 40 :: Ptr ImageLayout))-    regionCount <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))-    pRegions <- peek @(Ptr (ImageBlit2KHR _)) ((p `plusPtr` 48 :: Ptr (Ptr (ImageBlit2KHR a))))-    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekSomeCStruct (forgetExtensions ((pRegions `advancePtrBytes` (96 * (i)) :: Ptr (ImageBlit2KHR _)))))-    filter' <- peek @Filter ((p `plusPtr` 56 :: Ptr Filter))-    pure $ BlitImageInfo2KHR-             srcImage srcImageLayout dstImage dstImageLayout pRegions' filter'--instance Zero BlitImageInfo2KHR where-  zero = BlitImageInfo2KHR-           zero-           zero-           zero-           zero-           mempty-           zero----- | VkCopyBufferToImageInfo2KHR - Structure specifying parameters of a--- buffer to image copy command------ == Valid Usage------ -   If the image region specified by each element of @pRegions@ does not---     contain---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, it /must/ be a region that is contained within---     @dstImage@ if the @dstImage@’s 'Vulkan.Core10.Enums.Format.Format'---     is not a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     and /must/ be a region that is contained within the plane being---     copied to if the @dstImage@’s 'Vulkan.Core10.Enums.Format.Format' is---     a multi-planar format------ -   If the image region specified by each element of @pRegions@ does---     contain---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, the rotated destination region as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-rotation-addressing>---     /must/ be contained within @dstImage@.------ -   If any element of @pRegions@ contains---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, then the @dstImage@ /must/ not be a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>.------ -   If any element of @pRegions@ contains---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, then the @dstImage@ /must/ be of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and /must/ not be a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>.------ -   @srcBuffer@ /must/ be large enough to contain all buffer locations---     that are accessed according to---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,---     for each element of @pRegions@------ -   The union of all source regions, and the union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   @srcBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @dstImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'------ -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImage@ /must/ have a sample count equal to---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   @dstImageLayout@ /must/ specify the layout of the image subresources---     of @dstImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @dstImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   The @imageSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @imageSubresource.baseArrayLayer@ +---     @imageSubresource.layerCount@ of each element of @pRegions@ /must/---     be less than or equal to the @arrayLayers@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @imageOffset@ and @imageExtent@ members of each element of---     @pRegions@ /must/ respect the image transfer granularity---     requirements of @commandBuffer@’s command pool’s queue family, as---     described in---     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ -   @dstImage@ /must/ not have been created with @flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If the queue family used to create the---     'Vulkan.Core10.Handles.CommandPool' which @commandBuffer@ was---     allocated from does not support---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the---     @bufferOffset@ member of any element of @pRegions@ /must/ be a---     multiple of @4@------ -   If @dstImage@ has a depth\/stencil format, the @bufferOffset@ member---     of any element of @pRegions@ /must/ be a multiple of @4@------ -   If the queue family used to create the---     'Vulkan.Core10.Handles.CommandPool' which @commandBuffer@ was---     allocated from does not support---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT', for each---     element of @pRegions@, the @aspectMask@ member of @imageSubresource@---     /must/ not be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'.------ -   For each element of @pRegions@ not containing---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, , @imageOffset.x@ and (@imageExtent.width@ +---     @imageOffset.x@) /must/ both be greater than or equal to @0@ and---     less than or equal to the width of the specified @imageSubresource@---     of @dstImage@ where this refers to the width of the /plane/ of the---     image involved in the copy in the case of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>------ -   For each element of @pRegions@ not containing---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, , @imageOffset.y@ and (imageExtent.height +---     @imageOffset.y@) /must/ both be greater than or equal to @0@ and---     less than or equal to the height of the specified @imageSubresource@---     of @dstImage@ where this refers to the height of the /plane/ of the---     image involved in the copy in the case of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>------ -   If @dstImage@ does not have either a depth\/stencil or a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @bufferOffset@ /must/ be a---     multiple of the format’s texel block size------ -   If @dstImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @bufferOffset@ /must/ be a---     multiple of the element size of the compatible format for the format---     and the @aspectMask@ of the @imageSubresource@ as defined in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @imageOffset.y@ /must/ be @0@ and---     @imageExtent.height@ /must/ be @1@------ -   For each element of @pRegions@, @imageOffset.z@ and---     (imageExtent.depth + @imageOffset.z@) /must/ both be greater than or---     equal to @0@ and less than or equal to the depth of the specified---     @imageSubresource@ of @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@---     /must/ be @1@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferRowLength@ /must/ be a---     multiple of the compressed texel block width------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferImageHeight@ /must/ be a---     multiple of the compressed texel block height------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, all members of @imageOffset@ /must/---     be a multiple of the corresponding dimensions of the compressed---     texel block------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple---     of the compressed texel block size in bytes------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.width@ /must/ be a---     multiple of the compressed texel block width or (@imageExtent.width@---     + @imageOffset.x@) /must/ equal the width of the specified---     @imageSubresource@ of @dstImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.height@ /must/ be a---     multiple of the compressed texel block height or---     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of---     the specified @imageSubresource@ of @dstImage@------ -   If @dstImage@ is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.depth@ /must/ be a---     multiple of the compressed texel block depth or (@imageExtent.depth@---     + @imageOffset.z@) /must/ equal the depth of the specified---     @imageSubresource@ of @dstImage@------ -   For each element of @pRegions@, @imageSubresource.aspectMask@ /must/---     specify aspects present in @dstImage@------ -   If @dstImage@ has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @imageSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'---     (with---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'---     valid only for image formats with three planes)------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each element of---     @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be @0@ and---     @imageSubresource.layerCount@ /must/ be @1@------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @srcBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @dstImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'BufferImageCopy2KHR' structures------ -   @regionCount@ /must/ be greater than @0@------ -   Both of @dstImage@, and @srcBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy2KHR',--- 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'cmdCopyBufferToImage2KHR'-data CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2KHR-  { -- | @srcBuffer@ is the source buffer.-    srcBuffer :: Buffer-  , -- | @dstImage@ is the destination image.-    dstImage :: Image-  , -- | @dstImageLayout@ is the layout of the destination image subresources for-    -- the copy.-    dstImageLayout :: ImageLayout-  , -- | @pRegions@ is a pointer to an array of 'BufferImageCopy2KHR' structures-    -- specifying the regions to copy.-    regions :: Vector (SomeStruct BufferImageCopy2KHR)-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (CopyBufferToImageInfo2KHR)-#endif-deriving instance Show CopyBufferToImageInfo2KHR--instance ToCStruct CopyBufferToImageInfo2KHR where-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p CopyBufferToImageInfo2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (srcBuffer)-    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (dstImage)-    lift $ poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (dstImageLayout)-    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))-    pPRegions' <- ContT $ allocaBytesAligned @(BufferImageCopy2KHR _) ((Data.Vector.length (regions)) * 72) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (72 * (i)) :: Ptr (BufferImageCopy2KHR _))) (e) . ($ ())) (regions)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (BufferImageCopy2KHR _)))) (pPRegions')-    lift $ f-  cStructSize = 48-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (zero)-    lift $ poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (zero)-    pPRegions' <- ContT $ allocaBytesAligned @(BufferImageCopy2KHR _) ((Data.Vector.length (mempty)) * 72) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (72 * (i)) :: Ptr (BufferImageCopy2KHR _))) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (BufferImageCopy2KHR _)))) (pPRegions')-    lift $ f--instance FromCStruct CopyBufferToImageInfo2KHR where-  peekCStruct p = do-    srcBuffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))-    dstImage <- peek @Image ((p `plusPtr` 24 :: Ptr Image))-    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 32 :: Ptr ImageLayout))-    regionCount <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))-    pRegions <- peek @(Ptr (BufferImageCopy2KHR _)) ((p `plusPtr` 40 :: Ptr (Ptr (BufferImageCopy2KHR a))))-    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekSomeCStruct (forgetExtensions ((pRegions `advancePtrBytes` (72 * (i)) :: Ptr (BufferImageCopy2KHR _)))))-    pure $ CopyBufferToImageInfo2KHR-             srcBuffer dstImage dstImageLayout pRegions'--instance Zero CopyBufferToImageInfo2KHR where-  zero = CopyBufferToImageInfo2KHR-           zero-           zero-           zero-           mempty----- | VkCopyImageToBufferInfo2KHR - Structure specifying parameters of a image--- to buffer copy command------ == Valid Usage------ -   If the image region specified by each element of @pRegions@ does not---     contain---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, it /must/ be a region that is contained within---     @srcImage@ if the @srcImage@’s 'Vulkan.Core10.Enums.Format.Format'---     is not a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     and /must/ be a region that is contained within the plane being---     copied if the @srcImage@’s 'Vulkan.Core10.Enums.Format.Format' is a---     multi-planar format------ -   If the image region specified by each element of @pRegions@ does---     contain---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, the rotated source region as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-rotation-addressing>---     /must/ be contained within @srcImage@.------ -   If any element of @pRegions@ contains---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, then the @srcImage@ /must/ not be a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>------ -   If any element of @pRegions@ contains---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, then the @srcImage@ /must/ be of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and /must/ not be a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>.------ -   @dstBuffer@ /must/ be large enough to contain all buffer locations---     that are accessed according to---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,---     for each element of @pRegions@------ -   The union of all source regions, and the union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   @srcImage@ /must/ have been created with---     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'---     usage flag------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @srcImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'------ -   If @srcImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstBuffer@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'---     usage flag------ -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @srcImage@ /must/ have a sample count equal to---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   @srcImageLayout@ /must/ specify the layout of the image subresources---     of @srcImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @srcImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'------ -   The @imageSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @imageSubresource.baseArrayLayer@ +---     @imageSubresource.layerCount@ of each element of @pRegions@ /must/---     be less than or equal to the @arrayLayers@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @imageOffset@ and @imageExtent@ members of each element of---     @pRegions@ /must/ respect the image transfer granularity---     requirements of @commandBuffer@’s command pool’s queue family, as---     described in---     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'------ -   @srcImage@ /must/ not have been created with @flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If the queue family used to create the---     'Vulkan.Core10.Handles.CommandPool' which @commandBuffer@ was---     allocated from does not support---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or---     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the---     @bufferOffset@ member of any element of @pRegions@ /must/ be a---     multiple of @4@------ -   If @srcImage@ has a depth\/stencil format, the @bufferOffset@ member---     of any element of @pRegions@ /must/ be a multiple of @4@------ -   For each element of @pRegions@ not containing---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, , @imageOffset.x@ and (@imageExtent.width@ +---     @imageOffset.x@) /must/ both be greater than or equal to @0@ and---     less than or equal to the width of the specified @imageSubresource@---     of @srcImage@ where this refers to the width of the /plane/ of the---     image involved in the copy in the case of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>------ -   For each element of @pRegions@ not containing---     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'---     in its @pNext@ chain, , @imageOffset.y@ and (imageExtent.height +---     @imageOffset.y@) /must/ both be greater than or equal to @0@ and---     less than or equal to the height of the specified @imageSubresource@---     of @srcImage@ where this refers to the height of the /plane/ of the---     image involved in the copy in the case of a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>------ -   If {imageparam} does not have either a depth\/stencil or a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @bufferOffset@ /must/ be a---     multiple of the format’s texel block size------ -   If {imageparam} has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @bufferOffset@ /must/ be a---     multiple of the element size of the compatible format for the format---     and the @aspectMask@ of the @imageSubresource@ as defined in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>------ -   If {imageparam} is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @imageOffset.y@ /must/ be @0@ and---     @imageExtent.height@ /must/ be @1@------ -   For each element of @pRegions@, @imageOffset.z@ and---     (imageExtent.depth + @imageOffset.z@) /must/ both be greater than or---     equal to @0@ and less than or equal to the depth of the specified---     @imageSubresource@ of {imageparam}------ -   If {imageparam} is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@---     /must/ be @1@------ -   If {imageparam} is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferRowLength@ /must/ be a---     multiple of the compressed texel block width------ -   If {imageparam} is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferImageHeight@ /must/ be a---     multiple of the compressed texel block height------ -   If {imageparam} is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, all members of @imageOffset@ /must/---     be a multiple of the corresponding dimensions of the compressed---     texel block------ -   If {imageparam} is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple---     of the compressed texel block size in bytes------ -   If {imageparam} is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.width@ /must/ be a---     multiple of the compressed texel block width or (@imageExtent.width@---     + @imageOffset.x@) /must/ equal the width of the specified---     @imageSubresource@ of {imageparam}------ -   If {imageparam} is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.height@ /must/ be a---     multiple of the compressed texel block height or---     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of---     the specified @imageSubresource@ of {imageparam}------ -   If {imageparam} is a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,---     for each element of @pRegions@, @imageExtent.depth@ /must/ be a---     multiple of the compressed texel block depth or (@imageExtent.depth@---     + @imageOffset.z@) /must/ equal the depth of the specified---     @imageSubresource@ of {imageparam}------ -   For each element of @pRegions@, @imageSubresource.aspectMask@ /must/---     specify aspects present in {imageparam}------ -   If {imageparam} has a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,---     then for each element of @pRegions@, @imageSubresource.aspectMask@---     /must/ be---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',---     or---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'---     (with---     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'---     valid only for image formats with three planes)------ -   If {imageparam} is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each element of---     @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be @0@ and---     @imageSubresource.layerCount@ /must/ be @1@------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @srcImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @dstBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'BufferImageCopy2KHR' structures------ -   @regionCount@ /must/ be greater than @0@------ -   Both of @dstBuffer@, and @srcImage@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy2KHR',--- 'Vulkan.Core10.Handles.Image',--- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'cmdCopyImageToBuffer2KHR'-data CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2KHR-  { -- | @srcImage@ is the source image.-    srcImage :: Image-  , -- | @srcImageLayout@ is the layout of the source image subresources for the-    -- copy.-    srcImageLayout :: ImageLayout-  , -- | @dstBuffer@ is the destination buffer.-    dstBuffer :: Buffer-  , -- | @pRegions@ is a pointer to an array of 'BufferImageCopy2KHR' structures-    -- specifying the regions to copy.-    regions :: Vector (SomeStruct BufferImageCopy2KHR)-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (CopyImageToBufferInfo2KHR)-#endif-deriving instance Show CopyImageToBufferInfo2KHR--instance ToCStruct CopyImageToBufferInfo2KHR where-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p CopyImageToBufferInfo2KHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)-    lift $ poke ((p `plusPtr` 32 :: Ptr Buffer)) (dstBuffer)-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))-    pPRegions' <- ContT $ allocaBytesAligned @(BufferImageCopy2KHR _) ((Data.Vector.length (regions)) * 72) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (72 * (i)) :: Ptr (BufferImageCopy2KHR _))) (e) . ($ ())) (regions)-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (BufferImageCopy2KHR _)))) (pPRegions')-    lift $ f-  cStructSize = 56-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)-    lift $ poke ((p `plusPtr` 32 :: Ptr Buffer)) (zero)-    pPRegions' <- ContT $ allocaBytesAligned @(BufferImageCopy2KHR _) ((Data.Vector.length (mempty)) * 72) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (72 * (i)) :: Ptr (BufferImageCopy2KHR _))) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (BufferImageCopy2KHR _)))) (pPRegions')-    lift $ f--instance FromCStruct CopyImageToBufferInfo2KHR where-  peekCStruct p = do-    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))-    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))-    dstBuffer <- peek @Buffer ((p `plusPtr` 32 :: Ptr Buffer))-    regionCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))-    pRegions <- peek @(Ptr (BufferImageCopy2KHR _)) ((p `plusPtr` 48 :: Ptr (Ptr (BufferImageCopy2KHR a))))-    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekSomeCStruct (forgetExtensions ((pRegions `advancePtrBytes` (72 * (i)) :: Ptr (BufferImageCopy2KHR _)))))-    pure $ CopyImageToBufferInfo2KHR-             srcImage srcImageLayout dstBuffer pRegions'--instance Zero CopyImageToBufferInfo2KHR where-  zero = CopyImageToBufferInfo2KHR-           zero-           zero-           zero-           mempty----- | VkResolveImageInfo2KHR - Structure specifying parameters of resolve--- image command------ == Valid Usage------ -   The union of all source regions, and the union of all destination---     regions, specified by the elements of @pRegions@, /must/ not overlap---     in memory------ -   If @srcImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @srcImage@ /must/ have a sample count equal to any valid sample---     count value other than---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   If @dstImage@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @dstImage@ /must/ have a sample count equal to---     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'------ -   @srcImageLayout@ /must/ specify the layout of the image subresources---     of @srcImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @srcImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   @dstImageLayout@ /must/ specify the layout of the image subresources---     of @dstImage@ specified in @pRegions@ at the time this command is---     executed on a 'Vulkan.Core10.Handles.Device'------ -   @dstImageLayout@ /must/ be---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',---     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'---     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>---     of @dstImage@ /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'------ -   @srcImage@ and @dstImage@ /must/ have been created with the same---     image format------ -   The @srcSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created------ -   The @dstSubresource.mipLevel@ member of each element of @pRegions@---     /must/ be less than the @mipLevels@ specified in---     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created------ -   The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @srcImage@ was created------ -   The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of---     each element of @pRegions@ /must/ be less than or equal to the---     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'---     when @dstImage@ was created------ -   @dstImage@ and @srcImage@ /must/ not have been created with @flags@---     containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'------ -   If either @srcImage@ or @dstImage@ are of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and---     @srcSubresource.layerCount@ /must/ be @1@------ -   If either @srcImage@ or @dstImage@ are of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element---     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and---     @dstSubresource.layerCount@ /must/ be @1@------ -   For each element of @pRegions@, @srcOffset.x@ and (@extent.width@ +---     @srcOffset.x@) /must/ both be greater than or equal to @0@ and less---     than or equal to the width of the specified @srcSubresource@ of---     @srcImage@------ -   For each element of @pRegions@, @srcOffset.y@ and (@extent.height@ +---     @srcOffset.y@) /must/ both be greater than or equal to @0@ and less---     than or equal to the height of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@---     /must/ be @1@------ -   For each element of @pRegions@, @srcOffset.z@ and (@extent.depth@ +---     @srcOffset.z@) /must/ both be greater than or equal to @0@ and less---     than or equal to the depth of the specified @srcSubresource@ of---     @srcImage@------ -   If @srcImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/---     be @1@------ -   For each element of @pRegions@, @dstOffset.x@ and (@extent.width@ +---     @dstOffset.x@) /must/ both be greater than or equal to @0@ and less---     than or equal to the width of the specified @dstSubresource@ of---     @dstImage@------ -   For each element of @pRegions@, @dstOffset.y@ and (@extent.height@ +---     @dstOffset.y@) /must/ both be greater than or equal to @0@ and less---     than or equal to the height of the specified @dstSubresource@ of---     @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element---     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@---     /must/ be @1@------ -   For each element of @pRegions@, @dstOffset.z@ and (@extent.depth@ +---     @dstOffset.z@) /must/ both be greater than or equal to @0@ and less---     than or equal to the depth of the specified @dstSubresource@ of---     @dstImage@------ -   If @dstImage@ is of type---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or---     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element---     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/---     be @1@------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @srcImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @srcImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @dstImage@ /must/ be a valid 'Vulkan.Core10.Handles.Image' handle------ -   @dstImageLayout@ /must/ be a valid---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value------ -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@---     valid 'ImageResolve2KHR' structures------ -   @regionCount@ /must/ be greater than @0@------ -   Both of @dstImage@, and @srcImage@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdCopyBuffer2KHR-commandBuffer-01822# If @commandBuffer@ is+--     an unprotected command buffer, then @srcBuffer@ /must/ not be a+--     protected buffer+--+-- -   #VUID-vkCmdCopyBuffer2KHR-commandBuffer-01823# If @commandBuffer@ is+--     an unprotected command buffer, then @dstBuffer@ /must/ not be a+--     protected buffer+--+-- -   #VUID-vkCmdCopyBuffer2KHR-commandBuffer-01824# If @commandBuffer@ is+--     a protected command buffer, then @dstBuffer@ /must/ not be an+--     unprotected buffer+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyBuffer2KHR-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyBuffer2KHR-pCopyBufferInfo-parameter#+--     @pCopyBufferInfo@ /must/ be a valid pointer to a valid+--     'CopyBufferInfo2KHR' structure+--+-- -   #VUID-vkCmdCopyBuffer2KHR-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyBuffer2KHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdCopyBuffer2KHR-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CopyBufferInfo2KHR'+cmdCopyBuffer2KHR :: forall io+                   . (MonadIO io)+                  => -- | @commandBuffer@ is the command buffer into which the command will be+                     -- recorded.+                     CommandBuffer+                  -> -- | @pCopyBufferInfo@ is a pointer to a 'CopyBufferInfo2KHR' structure+                     -- describing the copy parameters.+                     CopyBufferInfo2KHR+                  -> io ()+cmdCopyBuffer2KHR commandBuffer copyBufferInfo = liftIO . evalContT $ do+  let vkCmdCopyBuffer2KHRPtr = pVkCmdCopyBuffer2KHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyBuffer2KHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBuffer2KHR is null" Nothing Nothing+  let vkCmdCopyBuffer2KHR' = mkVkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHRPtr+  pCopyBufferInfo <- ContT $ withCStruct (copyBufferInfo)+  lift $ vkCmdCopyBuffer2KHR' (commandBufferHandle (commandBuffer)) pCopyBufferInfo+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyImage2KHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyImageInfo2KHR -> IO ()++-- | vkCmdCopyImage2KHR - Copy data between images+--+-- = Description+--+-- This command is functionally identical to+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImage', but includes+-- extensible sub-structures that include @sType@ and @pNext@ parameters,+-- allowing them to be more easily extended.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyImage2KHR-commandBuffer-01825# If @commandBuffer@ is+--     an unprotected command buffer, then @srcImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdCopyImage2KHR-commandBuffer-01826# If @commandBuffer@ is+--     an unprotected command buffer, then @dstImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdCopyImage2KHR-commandBuffer-01827# If @commandBuffer@ is+--     a protected command buffer, then @dstImage@ /must/ not be an+--     unprotected image+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyImage2KHR-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyImage2KHR-pCopyImageInfo-parameter# @pCopyImageInfo@+--     /must/ be a valid pointer to a valid 'CopyImageInfo2KHR' structure+--+-- -   #VUID-vkCmdCopyImage2KHR-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyImage2KHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdCopyImage2KHR-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CopyImageInfo2KHR'+cmdCopyImage2KHR :: forall io+                  . (MonadIO io)+                 => -- | @commandBuffer@ is the command buffer into which the command will be+                    -- recorded.+                    CommandBuffer+                 -> -- | @pCopyImageInfo@ is a pointer to a 'CopyImageInfo2KHR' structure+                    -- describing the copy parameters.+                    CopyImageInfo2KHR+                 -> io ()+cmdCopyImage2KHR commandBuffer copyImageInfo = liftIO . evalContT $ do+  let vkCmdCopyImage2KHRPtr = pVkCmdCopyImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyImage2KHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImage2KHR is null" Nothing Nothing+  let vkCmdCopyImage2KHR' = mkVkCmdCopyImage2KHR vkCmdCopyImage2KHRPtr+  pCopyImageInfo <- ContT $ withCStruct (copyImageInfo)+  lift $ vkCmdCopyImage2KHR' (commandBufferHandle (commandBuffer)) pCopyImageInfo+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBlitImage2KHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr BlitImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr BlitImageInfo2KHR -> IO ()++-- | vkCmdBlitImage2KHR - Copy regions of an image, potentially performing+-- format conversion,+--+-- = Description+--+-- This command is functionally identical to+-- 'Vulkan.Core10.CommandBufferBuilding.cmdBlitImage', but includes+-- extensible sub-structures that include @sType@ and @pNext@ parameters,+-- allowing them to be more easily extended.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBlitImage2KHR-commandBuffer-01834# If @commandBuffer@ is+--     an unprotected command buffer, then @srcImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdBlitImage2KHR-commandBuffer-01835# If @commandBuffer@ is+--     an unprotected command buffer, then @dstImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdBlitImage2KHR-commandBuffer-01836# If @commandBuffer@ is+--     a protected command buffer, then @dstImage@ /must/ not be an+--     unprotected image+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBlitImage2KHR-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBlitImage2KHR-pBlitImageInfo-parameter# @pBlitImageInfo@+--     /must/ be a valid pointer to a valid 'BlitImageInfo2KHR' structure+--+-- -   #VUID-vkCmdBlitImage2KHR-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBlitImage2KHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdBlitImage2KHR-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'BlitImageInfo2KHR', 'Vulkan.Core10.Handles.CommandBuffer'+cmdBlitImage2KHR :: forall io+                  . (MonadIO io)+                 => -- | @commandBuffer@ is the command buffer into which the command will be+                    -- recorded.+                    CommandBuffer+                 -> -- | @pBlitImageInfo@ is a pointer to a 'BlitImageInfo2KHR' structure+                    -- describing the blit parameters.+                    BlitImageInfo2KHR+                 -> io ()+cmdBlitImage2KHR commandBuffer blitImageInfo = liftIO . evalContT $ do+  let vkCmdBlitImage2KHRPtr = pVkCmdBlitImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdBlitImage2KHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBlitImage2KHR is null" Nothing Nothing+  let vkCmdBlitImage2KHR' = mkVkCmdBlitImage2KHR vkCmdBlitImage2KHRPtr+  pBlitImageInfo <- ContT $ withCStruct (blitImageInfo)+  lift $ vkCmdBlitImage2KHR' (commandBufferHandle (commandBuffer)) pBlitImageInfo+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyBufferToImage2KHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyBufferToImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyBufferToImageInfo2KHR -> IO ()++-- | vkCmdCopyBufferToImage2KHR - Copy data from a buffer into an image+--+-- = Description+--+-- This command is functionally identical to+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBufferToImage', but includes+-- extensible sub-structures that include @sType@ and @pNext@ parameters,+-- allowing them to be more easily extended.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyBufferToImage2KHR-commandBuffer-01828# If+--     @commandBuffer@ is an unprotected command buffer, then @srcBuffer@+--     /must/ not be a protected buffer+--+-- -   #VUID-vkCmdCopyBufferToImage2KHR-commandBuffer-01829# If+--     @commandBuffer@ is an unprotected command buffer, then @dstImage@+--     /must/ not be a protected image+--+-- -   #VUID-vkCmdCopyBufferToImage2KHR-commandBuffer-01830# If+--     @commandBuffer@ is a protected command buffer, then @dstImage@+--     /must/ not be an unprotected image+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyBufferToImage2KHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyBufferToImage2KHR-pCopyBufferToImageInfo-parameter#+--     @pCopyBufferToImageInfo@ /must/ be a valid pointer to a valid+--     'CopyBufferToImageInfo2KHR' structure+--+-- -   #VUID-vkCmdCopyBufferToImage2KHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyBufferToImage2KHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdCopyBufferToImage2KHR-renderpass# This command /must/+--     only be called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CopyBufferToImageInfo2KHR'+cmdCopyBufferToImage2KHR :: forall io+                          . (MonadIO io)+                         => -- | @commandBuffer@ is the command buffer into which the command will be+                            -- recorded.+                            CommandBuffer+                         -> -- | @pCopyBufferToImageInfo@ is a pointer to a 'CopyBufferToImageInfo2KHR'+                            -- structure describing the copy parameters.+                            CopyBufferToImageInfo2KHR+                         -> io ()+cmdCopyBufferToImage2KHR commandBuffer copyBufferToImageInfo = liftIO . evalContT $ do+  let vkCmdCopyBufferToImage2KHRPtr = pVkCmdCopyBufferToImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyBufferToImage2KHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyBufferToImage2KHR is null" Nothing Nothing+  let vkCmdCopyBufferToImage2KHR' = mkVkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHRPtr+  pCopyBufferToImageInfo <- ContT $ withCStruct (copyBufferToImageInfo)+  lift $ vkCmdCopyBufferToImage2KHR' (commandBufferHandle (commandBuffer)) pCopyBufferToImageInfo+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyImageToBuffer2KHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr CopyImageToBufferInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr CopyImageToBufferInfo2KHR -> IO ()++-- | vkCmdCopyImageToBuffer2KHR - Copy image data into a buffer+--+-- = Description+--+-- This command is functionally identical to+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyImageToBuffer', but includes+-- extensible sub-structures that include @sType@ and @pNext@ parameters,+-- allowing them to be more easily extended.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyImageToBuffer2KHR-commandBuffer-01831# If+--     @commandBuffer@ is an unprotected command buffer, then @srcImage@+--     /must/ not be a protected image+--+-- -   #VUID-vkCmdCopyImageToBuffer2KHR-commandBuffer-01832# If+--     @commandBuffer@ is an unprotected command buffer, then @dstBuffer@+--     /must/ not be a protected buffer+--+-- -   #VUID-vkCmdCopyImageToBuffer2KHR-commandBuffer-01833# If+--     @commandBuffer@ is a protected command buffer, then @dstBuffer@+--     /must/ not be an unprotected buffer+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyImageToBuffer2KHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyImageToBuffer2KHR-pCopyImageToBufferInfo-parameter#+--     @pCopyImageToBufferInfo@ /must/ be a valid pointer to a valid+--     'CopyImageToBufferInfo2KHR' structure+--+-- -   #VUID-vkCmdCopyImageToBuffer2KHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyImageToBuffer2KHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support transfer, graphics, or compute+--     operations+--+-- -   #VUID-vkCmdCopyImageToBuffer2KHR-renderpass# This command /must/+--     only be called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Transfer                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        | Graphics                                                                                                              |                                                                                                                                     |+-- |                                                                                                                            |                                                                                                                        | Compute                                                                                                               |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'CopyImageToBufferInfo2KHR'+cmdCopyImageToBuffer2KHR :: forall io+                          . (MonadIO io)+                         => -- | @commandBuffer@ is the command buffer into which the command will be+                            -- recorded.+                            CommandBuffer+                         -> -- | @pCopyImageToBufferInfo@ is a pointer to a 'cmdCopyImageToBuffer2KHR'+                            -- structure describing the copy parameters.+                            CopyImageToBufferInfo2KHR+                         -> io ()+cmdCopyImageToBuffer2KHR commandBuffer copyImageToBufferInfo = liftIO . evalContT $ do+  let vkCmdCopyImageToBuffer2KHRPtr = pVkCmdCopyImageToBuffer2KHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyImageToBuffer2KHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyImageToBuffer2KHR is null" Nothing Nothing+  let vkCmdCopyImageToBuffer2KHR' = mkVkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHRPtr+  pCopyImageToBufferInfo <- ContT $ withCStruct (copyImageToBufferInfo)+  lift $ vkCmdCopyImageToBuffer2KHR' (commandBufferHandle (commandBuffer)) pCopyImageToBufferInfo+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdResolveImage2KHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr ResolveImageInfo2KHR -> IO ()) -> Ptr CommandBuffer_T -> Ptr ResolveImageInfo2KHR -> IO ()++-- | vkCmdResolveImage2KHR - Resolve regions of an image+--+-- = Description+--+-- This command is functionally identical to+-- 'Vulkan.Core10.CommandBufferBuilding.cmdResolveImage', but includes+-- extensible sub-structures that include @sType@ and @pNext@ parameters,+-- allowing them to be more easily extended.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdResolveImage2KHR-commandBuffer-01837# If @commandBuffer@+--     is an unprotected command buffer, then @srcImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdResolveImage2KHR-commandBuffer-01838# If @commandBuffer@+--     is an unprotected command buffer, then @dstImage@ /must/ not be a+--     protected image+--+-- -   #VUID-vkCmdResolveImage2KHR-commandBuffer-01839# If @commandBuffer@+--     is a protected command buffer, then @dstImage@ /must/ not be an+--     unprotected image+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdResolveImage2KHR-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdResolveImage2KHR-pResolveImageInfo-parameter#+--     @pResolveImageInfo@ /must/ be a valid pointer to a valid+--     'ResolveImageInfo2KHR' structure+--+-- -   #VUID-vkCmdResolveImage2KHR-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdResolveImage2KHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- -   #VUID-vkCmdResolveImage2KHR-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Graphics                                                                                                              | Transfer                                                                                                                            |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'ResolveImageInfo2KHR'+cmdResolveImage2KHR :: forall io+                     . (MonadIO io)+                    => -- | @commandBuffer@ is the command buffer into which the command will be+                       -- recorded.+                       CommandBuffer+                    -> -- | @pResolveImageInfo@ is a pointer to a 'ResolveImageInfo2KHR' structure+                       -- describing the resolve parameters.+                       ResolveImageInfo2KHR+                    -> io ()+cmdResolveImage2KHR commandBuffer resolveImageInfo = liftIO . evalContT $ do+  let vkCmdResolveImage2KHRPtr = pVkCmdResolveImage2KHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdResolveImage2KHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdResolveImage2KHR is null" Nothing Nothing+  let vkCmdResolveImage2KHR' = mkVkCmdResolveImage2KHR vkCmdResolveImage2KHRPtr+  pResolveImageInfo <- ContT $ withCStruct (resolveImageInfo)+  lift $ vkCmdResolveImage2KHR' (commandBufferHandle (commandBuffer)) pResolveImageInfo+  pure $ ()+++-- | VkBufferCopy2KHR - Structure specifying a buffer copy operation+--+-- == Valid Usage+--+-- -   #VUID-VkBufferCopy2KHR-size-01988# The @size@ /must/ be greater than+--     @0@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkBufferCopy2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_COPY_2_KHR'+--+-- -   #VUID-VkBufferCopy2KHR-pNext-pNext# @pNext@ /must/ be @NULL@+--+-- = See Also+--+-- 'CopyBufferInfo2KHR', 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data BufferCopy2KHR = BufferCopy2KHR+  { -- | @srcOffset@ is the starting offset in bytes from the start of+    -- @srcBuffer@.+    srcOffset :: DeviceSize+  , -- | @dstOffset@ is the starting offset in bytes from the start of+    -- @dstBuffer@.+    dstOffset :: DeviceSize+  , -- | @size@ is the number of bytes to copy.+    size :: DeviceSize+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (BufferCopy2KHR)+#endif+deriving instance Show BufferCopy2KHR++instance ToCStruct BufferCopy2KHR where+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p BufferCopy2KHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_COPY_2_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (srcOffset)+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (dstOffset)+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (size)+    f+  cStructSize = 40+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_COPY_2_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)+    poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)+    f++instance FromCStruct BufferCopy2KHR where+  peekCStruct p = do+    srcOffset <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))+    dstOffset <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))+    size <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))+    pure $ BufferCopy2KHR+             srcOffset dstOffset size++instance Storable BufferCopy2KHR where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero BufferCopy2KHR where+  zero = BufferCopy2KHR+           zero+           zero+           zero+++-- | VkImageCopy2KHR - Structure specifying an image copy operation+--+-- == Valid Usage+--+-- -   #VUID-VkImageCopy2KHR-extent-00140# The number of slices of the+--     @extent@ (for 3D) or layers of the @srcSubresource@ (for non-3D)+--     /must/ match the number of slices of the @extent@ (for 3D) or layers+--     of the @dstSubresource@ (for non-3D)+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkImageCopy2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_COPY_2_KHR'+--+-- -   #VUID-VkImageCopy2KHR-pNext-pNext# @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkImageCopy2KHR-srcSubresource-parameter# @srcSubresource@+--     /must/ be a valid+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'+--     structure+--+-- -   #VUID-VkImageCopy2KHR-dstSubresource-parameter# @dstSubresource@+--     /must/ be a valid+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'+--     structure+--+-- = See Also+--+-- 'CopyImageInfo2KHR', 'Vulkan.Core10.FundamentalTypes.Extent3D',+-- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',+-- 'Vulkan.Core10.FundamentalTypes.Offset3D',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data ImageCopy2KHR = ImageCopy2KHR+  { -- | @srcSubresource@ and @dstSubresource@ are+    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' structures+    -- specifying the image subresources of the images used for the source and+    -- destination image data, respectively.+    srcSubresource :: ImageSubresourceLayers+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets+    -- in texels of the sub-regions of the source and destination image data.+    srcOffset :: Offset3D+  , -- No documentation found for Nested "VkImageCopy2KHR" "dstSubresource"+    dstSubresource :: ImageSubresourceLayers+  , -- No documentation found for Nested "VkImageCopy2KHR" "dstOffset"+    dstOffset :: Offset3D+  , -- | @extent@ is the size in texels of the image to copy in @width@, @height@+    -- and @depth@.+    extent :: Extent3D+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ImageCopy2KHR)+#endif+deriving instance Show ImageCopy2KHR++instance ToCStruct ImageCopy2KHR where+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ImageCopy2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_COPY_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (srcOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (dstOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (extent) . ($ ())+    lift $ f+  cStructSize = 88+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_COPY_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (zero) . ($ ())+    lift $ f++instance FromCStruct ImageCopy2KHR where+  peekCStruct p = do+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))+    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers))+    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 60 :: Ptr Offset3D))+    extent <- peekCStruct @Extent3D ((p `plusPtr` 72 :: Ptr Extent3D))+    pure $ ImageCopy2KHR+             srcSubresource srcOffset dstSubresource dstOffset extent++instance Zero ImageCopy2KHR where+  zero = ImageCopy2KHR+           zero+           zero+           zero+           zero+           zero+++-- | VkImageBlit2KHR - Structure specifying an image blit operation+--+-- = Description+--+-- For each element of the @pRegions@ array, a blit operation is performed+-- for the specified source and destination regions.+--+-- == Valid Usage+--+-- -   #VUID-VkImageBlit2KHR-aspectMask-00238# The @aspectMask@ member of+--     @srcSubresource@ and @dstSubresource@ /must/ match+--+-- -   #VUID-VkImageBlit2KHR-layerCount-00239# The @layerCount@ member of+--     @srcSubresource@ and @dstSubresource@ /must/ match+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkImageBlit2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_BLIT_2_KHR'+--+-- -   #VUID-VkImageBlit2KHR-pNext-pNext# @pNext@ /must/ be @NULL@ or a+--     pointer to a valid instance of+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--+-- -   #VUID-VkImageBlit2KHR-sType-unique# The @sType@ value of each struct+--     in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkImageBlit2KHR-srcSubresource-parameter# @srcSubresource@+--     /must/ be a valid+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'+--     structure+--+-- -   #VUID-VkImageBlit2KHR-dstSubresource-parameter# @dstSubresource@+--     /must/ be a valid+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'+--     structure+--+-- = See Also+--+-- 'BlitImageInfo2KHR',+-- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',+-- 'Vulkan.Core10.FundamentalTypes.Offset3D',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data ImageBlit2KHR (es :: [Type]) = ImageBlit2KHR+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @srcSubresource@ is the subresource to blit from.+    srcSubresource :: ImageSubresourceLayers+  , -- | @srcOffsets@ is a pointer to an array of two+    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the+    -- bounds of the source region within @srcSubresource@.+    srcOffsets :: (Offset3D, Offset3D)+  , -- | @dstSubresource@ is the subresource to blit into.+    dstSubresource :: ImageSubresourceLayers+  , -- | @dstOffsets@ is a pointer to an array of two+    -- 'Vulkan.Core10.FundamentalTypes.Offset3D' structures specifying the+    -- bounds of the destination region within @dstSubresource@.+    dstOffsets :: (Offset3D, Offset3D)+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ImageBlit2KHR (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (ImageBlit2KHR es)++instance Extensible ImageBlit2KHR where+  extensibleType = STRUCTURE_TYPE_IMAGE_BLIT_2_KHR+  setNext x next = x{next = next}+  getNext ImageBlit2KHR{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ImageBlit2KHR e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @CopyCommandTransformInfoQCOM = Just f+    | otherwise = Nothing++instance (Extendss ImageBlit2KHR es, PokeChain es) => ToCStruct (ImageBlit2KHR es) where+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ImageBlit2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_BLIT_2_KHR)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())+    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))+    case (srcOffsets) of+      (e0, e1) -> do+        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())+        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())+    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))+    case (dstOffsets) of+      (e0, e1) -> do+        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())+        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())+    lift $ f+  cStructSize = 96+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_BLIT_2_KHR)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    let pSrcOffsets' = lowerArrayPtr ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))+    case ((zero, zero)) of+      (e0, e1) -> do+        ContT $ pokeCStruct (pSrcOffsets' :: Ptr Offset3D) (e0) . ($ ())+        ContT $ pokeCStruct (pSrcOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    let pDstOffsets' = lowerArrayPtr ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))+    case ((zero, zero)) of+      (e0, e1) -> do+        ContT $ pokeCStruct (pDstOffsets' :: Ptr Offset3D) (e0) . ($ ())+        ContT $ pokeCStruct (pDstOffsets' `plusPtr` 12 :: Ptr Offset3D) (e1) . ($ ())+    lift $ f++instance (Extendss ImageBlit2KHR es, PeekChain es) => FromCStruct (ImageBlit2KHR es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))+    let psrcOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 32 :: Ptr (FixedArray 2 Offset3D)))+    srcOffsets0 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 0 :: Ptr Offset3D))+    srcOffsets1 <- peekCStruct @Offset3D ((psrcOffsets `advancePtrBytes` 12 :: Ptr Offset3D))+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 56 :: Ptr ImageSubresourceLayers))+    let pdstOffsets = lowerArrayPtr @Offset3D ((p `plusPtr` 72 :: Ptr (FixedArray 2 Offset3D)))+    dstOffsets0 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 0 :: Ptr Offset3D))+    dstOffsets1 <- peekCStruct @Offset3D ((pdstOffsets `advancePtrBytes` 12 :: Ptr Offset3D))+    pure $ ImageBlit2KHR+             next srcSubresource ((srcOffsets0, srcOffsets1)) dstSubresource ((dstOffsets0, dstOffsets1))++instance es ~ '[] => Zero (ImageBlit2KHR es) where+  zero = ImageBlit2KHR+           ()+           zero+           (zero, zero)+           zero+           (zero, zero)+++-- | VkBufferImageCopy2KHR - Structure specifying a buffer image copy+-- operation+--+-- = Description+--+-- This structure is functionally identical to+-- 'Vulkan.Core10.CommandBufferBuilding.BufferImageCopy', but adds @sType@+-- and @pNext@ parameters, allowing it to be more easily extended.+--+-- == Valid Usage+--+-- -   #VUID-VkBufferImageCopy2KHR-bufferRowLength-00195# @bufferRowLength@+--     /must/ be @0@, or greater than or equal to the @width@ member of+--     @imageExtent@+--+-- -   #VUID-VkBufferImageCopy2KHR-bufferImageHeight-00196#+--     @bufferImageHeight@ /must/ be @0@, or greater than or equal to the+--     @height@ member of @imageExtent@+--+-- -   #VUID-VkBufferImageCopy2KHR-aspectMask-00212# The @aspectMask@+--     member of @imageSubresource@ /must/ only have a single bit set+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkBufferImageCopy2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR'+--+-- -   #VUID-VkBufferImageCopy2KHR-pNext-pNext# @pNext@ /must/ be @NULL@ or+--     a pointer to a valid instance of+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--+-- -   #VUID-VkBufferImageCopy2KHR-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkBufferImageCopy2KHR-imageSubresource-parameter#+--     @imageSubresource@ /must/ be a valid+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'+--     structure+--+-- = See Also+--+-- 'CopyBufferToImageInfo2KHR', 'CopyImageToBufferInfo2KHR',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.FundamentalTypes.Extent3D',+-- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',+-- 'Vulkan.Core10.FundamentalTypes.Offset3D',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data BufferImageCopy2KHR (es :: [Type]) = BufferImageCopy2KHR+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @bufferOffset@ is the offset in bytes from the start of the buffer+    -- object where the image data is copied from or to.+    bufferOffset :: DeviceSize+  , -- | @bufferRowLength@ and @bufferImageHeight@ specify in texels a subregion+    -- of a larger two- or three-dimensional image in buffer memory, and+    -- control the addressing calculations. If either of these values is zero,+    -- that aspect of the buffer memory is considered to be tightly packed+    -- according to the @imageExtent@.+    bufferRowLength :: Word32+  , -- No documentation found for Nested "VkBufferImageCopy2KHR" "bufferImageHeight"+    bufferImageHeight :: Word32+  , -- | @imageSubresource@ is a+    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' used to+    -- specify the specific image subresources of the image used for the source+    -- or destination image data.+    imageSubresource :: ImageSubresourceLayers+  , -- | @imageOffset@ selects the initial @x@, @y@, @z@ offsets in texels of the+    -- sub-region of the source or destination image data.+    imageOffset :: Offset3D+  , -- | @imageExtent@ is the size in texels of the image to copy in @width@,+    -- @height@ and @depth@.+    imageExtent :: Extent3D+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (BufferImageCopy2KHR (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (BufferImageCopy2KHR es)++instance Extensible BufferImageCopy2KHR where+  extensibleType = STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR+  setNext x next = x{next = next}+  getNext BufferImageCopy2KHR{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends BufferImageCopy2KHR e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @CopyCommandTransformInfoQCOM = Just f+    | otherwise = Nothing++instance (Extendss BufferImageCopy2KHR es, PokeChain es) => ToCStruct (BufferImageCopy2KHR es) where+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p BufferImageCopy2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (bufferOffset)+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (bufferRowLength)+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (bufferImageHeight)+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers)) (imageSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr Offset3D)) (imageOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent3D)) (imageExtent) . ($ ())+    lift $ f+  cStructSize = 72+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)+    lift $ poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Extent3D)) (zero) . ($ ())+    lift $ f++instance (Extendss BufferImageCopy2KHR es, PeekChain es) => FromCStruct (BufferImageCopy2KHR es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    bufferOffset <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))+    bufferRowLength <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))+    bufferImageHeight <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))+    imageSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 32 :: Ptr ImageSubresourceLayers))+    imageOffset <- peekCStruct @Offset3D ((p `plusPtr` 48 :: Ptr Offset3D))+    imageExtent <- peekCStruct @Extent3D ((p `plusPtr` 60 :: Ptr Extent3D))+    pure $ BufferImageCopy2KHR+             next bufferOffset bufferRowLength bufferImageHeight imageSubresource imageOffset imageExtent++instance es ~ '[] => Zero (BufferImageCopy2KHR es) where+  zero = BufferImageCopy2KHR+           ()+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkImageResolve2KHR - Structure specifying an image resolve operation+--+-- == Valid Usage+--+-- -   #VUID-VkImageResolve2KHR-aspectMask-00266# The @aspectMask@ member+--     of @srcSubresource@ and @dstSubresource@ /must/ only contain+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- -   #VUID-VkImageResolve2KHR-layerCount-00267# The @layerCount@ member+--     of @srcSubresource@ and @dstSubresource@ /must/ match+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkImageResolve2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR'+--+-- -   #VUID-VkImageResolve2KHR-pNext-pNext# @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkImageResolve2KHR-srcSubresource-parameter# @srcSubresource@+--     /must/ be a valid+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'+--     structure+--+-- -   #VUID-VkImageResolve2KHR-dstSubresource-parameter# @dstSubresource@+--     /must/ be a valid+--     'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers'+--     structure+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Extent3D',+-- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers',+-- 'Vulkan.Core10.FundamentalTypes.Offset3D', 'ResolveImageInfo2KHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data ImageResolve2KHR = ImageResolve2KHR+  { -- | @srcSubresource@ and @dstSubresource@ are+    -- 'Vulkan.Core10.CommandBufferBuilding.ImageSubresourceLayers' structures+    -- specifying the image subresources of the images used for the source and+    -- destination image data, respectively. Resolve of depth\/stencil images+    -- is not supported.+    srcSubresource :: ImageSubresourceLayers+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets+    -- in texels of the sub-regions of the source and destination image data.+    srcOffset :: Offset3D+  , -- No documentation found for Nested "VkImageResolve2KHR" "dstSubresource"+    dstSubresource :: ImageSubresourceLayers+  , -- No documentation found for Nested "VkImageResolve2KHR" "dstOffset"+    dstOffset :: Offset3D+  , -- | @extent@ is the size in texels of the source image to resolve in+    -- @width@, @height@ and @depth@.+    extent :: Extent3D+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (ImageResolve2KHR)+#endif+deriving instance Show ImageResolve2KHR++instance ToCStruct ImageResolve2KHR where+  withCStruct x f = allocaBytesAligned 88 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p ImageResolve2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (srcSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (srcOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (dstSubresource) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (dstOffset) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (extent) . ($ ())+    lift $ f+  cStructSize = 88+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 32 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 60 :: Ptr Offset3D)) (zero) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 72 :: Ptr Extent3D)) (zero) . ($ ())+    lift $ f++instance FromCStruct ImageResolve2KHR where+  peekCStruct p = do+    srcSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 16 :: Ptr ImageSubresourceLayers))+    srcOffset <- peekCStruct @Offset3D ((p `plusPtr` 32 :: Ptr Offset3D))+    dstSubresource <- peekCStruct @ImageSubresourceLayers ((p `plusPtr` 44 :: Ptr ImageSubresourceLayers))+    dstOffset <- peekCStruct @Offset3D ((p `plusPtr` 60 :: Ptr Offset3D))+    extent <- peekCStruct @Extent3D ((p `plusPtr` 72 :: Ptr Extent3D))+    pure $ ImageResolve2KHR+             srcSubresource srcOffset dstSubresource dstOffset extent++instance Zero ImageResolve2KHR where+  zero = ImageResolve2KHR+           zero+           zero+           zero+           zero+           zero+++-- | VkCopyBufferInfo2KHR - Structure specifying parameters of a buffer copy+-- command+--+-- = Description+--+-- Members defined by this structure with the same name as parameters in+-- 'Vulkan.Core10.CommandBufferBuilding.cmdCopyBuffer' have the identical+-- effect to those parameters; the child structure 'BufferCopy2KHR' is a+-- variant of 'Vulkan.Core10.CommandBufferBuilding.BufferCopy' which+-- includes @sType@ and @pNext@ parameters, allowing it to be extended.+--+-- == Valid Usage+--+-- -   #VUID-VkCopyBufferInfo2KHR-srcOffset-00113# The @srcOffset@ member+--     of each element of @pRegions@ /must/ be less than the size of+--     @srcBuffer@+--+-- -   #VUID-VkCopyBufferInfo2KHR-dstOffset-00114# The @dstOffset@ member+--     of each element of @pRegions@ /must/ be less than the size of+--     @dstBuffer@+--+-- -   #VUID-VkCopyBufferInfo2KHR-size-00115# The @size@ member of each+--     element of @pRegions@ /must/ be less than or equal to the size of+--     @srcBuffer@ minus @srcOffset@+--+-- -   #VUID-VkCopyBufferInfo2KHR-size-00116# The @size@ member of each+--     element of @pRegions@ /must/ be less than or equal to the size of+--     @dstBuffer@ minus @dstOffset@+--+-- -   #VUID-VkCopyBufferInfo2KHR-pRegions-00117# The union of the source+--     regions, and the union of the destination regions, specified by the+--     elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-VkCopyBufferInfo2KHR-srcBuffer-00118# @srcBuffer@ /must/ have+--     been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-VkCopyBufferInfo2KHR-srcBuffer-00119# If @srcBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkCopyBufferInfo2KHR-dstBuffer-00120# @dstBuffer@ /must/ have+--     been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-VkCopyBufferInfo2KHR-dstBuffer-00121# If @dstBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkCopyBufferInfo2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR'+--+-- -   #VUID-VkCopyBufferInfo2KHR-pNext-pNext# @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkCopyBufferInfo2KHR-srcBuffer-parameter# @srcBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-VkCopyBufferInfo2KHR-dstBuffer-parameter# @dstBuffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-VkCopyBufferInfo2KHR-pRegions-parameter# @pRegions@ /must/ be+--     a valid pointer to an array of @regionCount@ valid 'BufferCopy2KHR'+--     structures+--+-- -   #VUID-VkCopyBufferInfo2KHR-regionCount-arraylength# @regionCount@+--     /must/ be greater than @0@+--+-- -   #VUID-VkCopyBufferInfo2KHR-commonparent# Both of @dstBuffer@, and+--     @srcBuffer@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'BufferCopy2KHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdCopyBuffer2KHR'+data CopyBufferInfo2KHR = CopyBufferInfo2KHR+  { -- | @srcBuffer@ is the source buffer.+    srcBuffer :: Buffer+  , -- | @dstBuffer@ is the destination buffer.+    dstBuffer :: Buffer+  , -- | @pRegions@ is a pointer to an array of 'BufferCopy2KHR' structures+    -- specifying the regions to copy.+    regions :: Vector BufferCopy2KHR+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (CopyBufferInfo2KHR)+#endif+deriving instance Show CopyBufferInfo2KHR++instance ToCStruct CopyBufferInfo2KHR where+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p CopyBufferInfo2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (srcBuffer)+    lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (dstBuffer)+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))+    pPRegions' <- ContT $ allocaBytesAligned @BufferCopy2KHR ((Data.Vector.length (regions)) * 40) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (40 * (i)) :: Ptr BufferCopy2KHR) (e) . ($ ())) (regions)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR))) (pPRegions')+    lift $ f+  cStructSize = 48+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr Buffer)) (zero)+    pPRegions' <- ContT $ allocaBytesAligned @BufferCopy2KHR ((Data.Vector.length (mempty)) * 40) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (40 * (i)) :: Ptr BufferCopy2KHR) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR))) (pPRegions')+    lift $ f++instance FromCStruct CopyBufferInfo2KHR where+  peekCStruct p = do+    srcBuffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))+    dstBuffer <- peek @Buffer ((p `plusPtr` 24 :: Ptr Buffer))+    regionCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))+    pRegions <- peek @(Ptr BufferCopy2KHR) ((p `plusPtr` 40 :: Ptr (Ptr BufferCopy2KHR)))+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @BufferCopy2KHR ((pRegions `advancePtrBytes` (40 * (i)) :: Ptr BufferCopy2KHR)))+    pure $ CopyBufferInfo2KHR+             srcBuffer dstBuffer pRegions'++instance Zero CopyBufferInfo2KHR where+  zero = CopyBufferInfo2KHR+           zero+           zero+           mempty+++-- | VkCopyImageInfo2KHR - Structure specifying parameters of an image copy+-- command+--+-- == Valid Usage+--+-- -   #VUID-VkCopyImageInfo2KHR-pRegions-00124# The union of all source+--     regions, and the union of all destination regions, specified by the+--     elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01995# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-00126# @srcImage@ /must/ have+--     been created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01546# If @srcImage@ is+--     non-sparse then the image or /disjoint/ plane to be copied /must/ be+--     bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImageLayout-00128# @srcImageLayout@+--     /must/ specify the layout of the image subresources of @srcImage@+--     specified in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImageLayout-01917# @srcImageLayout@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01996# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @dstImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-00131# @dstImage@ /must/ have+--     been created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01547# If @dstImage@ is+--     non-sparse then the image or /disjoint/ plane that is the+--     destination of the copy /must/ be bound completely and contiguously+--     to a single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImageLayout-00133# @dstImageLayout@+--     /must/ specify the layout of the image subresources of @dstImage@+--     specified in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImageLayout-01395# @dstImageLayout@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01548# If the+--     'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and+--     @dstImage@ is not a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     the 'Vulkan.Core10.Enums.Format.Format' of each of @srcImage@ and+--     @dstImage@ /must/ be compatible, as defined+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-images-format-compatibility above>+--+-- -   #VUID-VkCopyImageInfo2KHR-None-01549# In a copy to or from a plane+--     of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image>,+--     the 'Vulkan.Core10.Enums.Format.Format' of the image and plane+--     /must/ be compatible according to+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes the description of compatible planes>+--     for the plane being copied+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-00136# The sample count of+--     @srcImage@ and @dstImage@ /must/ match+--+-- -   #VUID-VkCopyImageInfo2KHR-srcSubresource-01696# The+--     @srcSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- -   #VUID-VkCopyImageInfo2KHR-dstSubresource-01697# The+--     @dstSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- -   #VUID-VkCopyImageInfo2KHR-srcSubresource-01698# The+--     @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @srcImage@ was created+--+-- -   #VUID-VkCopyImageInfo2KHR-dstSubresource-01699# The+--     @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @dstImage@ was created+--+-- -   #VUID-VkCopyImageInfo2KHR-srcOffset-01783# The @srcOffset@ and+--     @extent@ members of each element of @pRegions@ /must/ respect the+--     image transfer granularity requirements of @commandBuffer@’s command+--     pool’s queue family, as described in+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- -   #VUID-VkCopyImageInfo2KHR-dstOffset-01784# The @dstOffset@ and+--     @extent@ members of each element of @pRegions@ /must/ respect the+--     image transfer granularity requirements of @commandBuffer@’s command+--     pool’s queue family, as described in+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-02542# @dstImage@ and @srcImage@+--     /must/ not have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01551# If neither @srcImage@ nor+--     @dstImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+--     then for each element of @pRegions@, @srcSubresource.aspectMask@ and+--     @dstSubresource.aspectMask@ /must/ match+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01552# If @srcImage@ has a+--     'Vulkan.Core10.Enums.Format.Format' with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>+--     then for each element of @pRegions@, @srcSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01553# If @srcImage@ has a+--     'Vulkan.Core10.Enums.Format.Format' with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>+--     then for each element of @pRegions@, @srcSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01554# If @dstImage@ has a+--     'Vulkan.Core10.Enums.Format.Format' with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion two planes>+--     then for each element of @pRegions@, @dstSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01555# If @dstImage@ has a+--     'Vulkan.Core10.Enums.Format.Format' with+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion three planes>+--     then for each element of @pRegions@, @dstSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01556# If @srcImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+--     and the @dstImage@ does not have a multi-planar image format, then+--     for each element of @pRegions@, @dstSubresource.aspectMask@ /must/+--     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01557# If @dstImage@ has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar image format>+--     and the @srcImage@ does not have a multi-planar image format, then+--     for each element of @pRegions@, @srcSubresource.aspectMask@ /must/+--     be 'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-04443# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+--     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and and+--     @srcSubresource.layerCount@ /must/ be @1@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-04444# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+--     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and and+--     @dstSubresource.layerCount@ /must/ be @1@+--+-- -   #VUID-VkCopyImageInfo2KHR-aspectMask-00142# For each element of+--     @pRegions@, @srcSubresource.aspectMask@ /must/ specify aspects+--     present in @srcImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-aspectMask-00143# For each element of+--     @pRegions@, @dstSubresource.aspectMask@ /must/ specify aspects+--     present in @dstImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcOffset-00144# For each element of+--     @pRegions@, @srcOffset.x@ and (@extent.width@ + @srcOffset.x@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the width of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcOffset-00145# For each element of+--     @pRegions@, @srcOffset.y@ and (@extent.height@ + @srcOffset.y@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the height of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-00146# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @srcOffset.y@ /must/ be @0@ and @extent.height@+--     /must/ be @1@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcOffset-00147# For each element of+--     @pRegions@, @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the depth of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01785# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/+--     be @1@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01786# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/+--     be @1@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01787# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @srcOffset.z@ /must/ be @0@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01788# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @dstOffset.z@ /must/ be @0@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01790# If @srcImage@ and+--     @dstImage@ are both of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @extent.depth@ /must/ be @1@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01791# If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @dstImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each+--     element of @pRegions@, @extent.depth@ /must/ equal+--     @srcSubresource.layerCount@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01792# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and @srcImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each+--     element of @pRegions@, @extent.depth@ /must/ equal+--     @dstSubresource.layerCount@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstOffset-00150# For each element of+--     @pRegions@, @dstOffset.x@ and (@extent.width@ + @dstOffset.x@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the width of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstOffset-00151# For each element of+--     @pRegions@, @dstOffset.y@ and (@extent.height@ + @dstOffset.y@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the height of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-00152# If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @dstOffset.y@ /must/ be @0@ and @extent.height@+--     /must/ be @1@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstOffset-00153# For each element of+--     @pRegions@, @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the depth of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01727# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, all members of @srcOffset@+--     /must/ be a multiple of the corresponding dimensions of the+--     compressed texel block+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01728# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.width@ /must/ be a+--     multiple of the compressed texel block width or (@extent.width@ ++--     @srcOffset.x@) /must/ equal the width of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01729# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.height@ /must/ be a+--     multiple of the compressed texel block height or (@extent.height@ ++--     @srcOffset.y@) /must/ equal the height of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-01730# If @srcImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.depth@ /must/ be a+--     multiple of the compressed texel block depth or (@extent.depth@ ++--     @srcOffset.z@) /must/ equal the depth of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01731# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, all members of @dstOffset@+--     /must/ be a multiple of the corresponding dimensions of the+--     compressed texel block+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01732# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.width@ /must/ be a+--     multiple of the compressed texel block width or (@extent.width@ ++--     @dstOffset.x@) /must/ equal the width of the specified+--     @dstSubresource@ of @dstImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01733# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.height@ /must/ be a+--     multiple of the compressed texel block height or (@extent.height@ ++--     @dstOffset.y@) /must/ equal the height of the specified+--     @dstSubresource@ of @dstImage@+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-01734# If @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     then for each element of @pRegions@, @extent.depth@ /must/ be a+--     multiple of the compressed texel block depth or (@extent.depth@ ++--     @dstOffset.z@) /must/ equal the depth of the specified+--     @dstSubresource@ of @dstImage@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkCopyImageInfo2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR'+--+-- -   #VUID-VkCopyImageInfo2KHR-pNext-pNext# @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImage-parameter# @srcImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-VkCopyImageInfo2KHR-srcImageLayout-parameter# @srcImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImage-parameter# @dstImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-VkCopyImageInfo2KHR-dstImageLayout-parameter# @dstImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-VkCopyImageInfo2KHR-pRegions-parameter# @pRegions@ /must/ be a+--     valid pointer to an array of @regionCount@ valid 'ImageCopy2KHR'+--     structures+--+-- -   #VUID-VkCopyImageInfo2KHR-regionCount-arraylength# @regionCount@+--     /must/ be greater than @0@+--+-- -   #VUID-VkCopyImageInfo2KHR-commonparent# Both of @dstImage@, and+--     @srcImage@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Image', 'ImageCopy2KHR',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdCopyImage2KHR'+data CopyImageInfo2KHR = CopyImageInfo2KHR+  { -- | @srcImage@ is the source image.+    srcImage :: Image+  , -- | @srcImageLayout@ is the current layout of the source image subresource.+    srcImageLayout :: ImageLayout+  , -- | @dstImage@ is the destination image.+    dstImage :: Image+  , -- | @dstImageLayout@ is the current layout of the destination image+    -- subresource.+    dstImageLayout :: ImageLayout+  , -- | @pRegions@ is a pointer to an array of 'ImageCopy2KHR' structures+    -- specifying the regions to copy.+    regions :: Vector ImageCopy2KHR+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (CopyImageInfo2KHR)+#endif+deriving instance Show CopyImageInfo2KHR++instance ToCStruct CopyImageInfo2KHR where+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p CopyImageInfo2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (dstImage)+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (dstImageLayout)+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))+    pPRegions' <- ContT $ allocaBytesAligned @ImageCopy2KHR ((Data.Vector.length (regions)) * 88) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (88 * (i)) :: Ptr ImageCopy2KHR) (e) . ($ ())) (regions)+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR))) (pPRegions')+    lift $ f+  cStructSize = 56+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (zero)+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (zero)+    pPRegions' <- ContT $ allocaBytesAligned @ImageCopy2KHR ((Data.Vector.length (mempty)) * 88) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPRegions' `plusPtr` (88 * (i)) :: Ptr ImageCopy2KHR) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR))) (pPRegions')+    lift $ f++instance FromCStruct CopyImageInfo2KHR where+  peekCStruct p = do+    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))+    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))+    dstImage <- peek @Image ((p `plusPtr` 32 :: Ptr Image))+    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 40 :: Ptr ImageLayout))+    regionCount <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))+    pRegions <- peek @(Ptr ImageCopy2KHR) ((p `plusPtr` 48 :: Ptr (Ptr ImageCopy2KHR)))+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekCStruct @ImageCopy2KHR ((pRegions `advancePtrBytes` (88 * (i)) :: Ptr ImageCopy2KHR)))+    pure $ CopyImageInfo2KHR+             srcImage srcImageLayout dstImage dstImageLayout pRegions'++instance Zero CopyImageInfo2KHR where+  zero = CopyImageInfo2KHR+           zero+           zero+           zero+           zero+           mempty+++-- | VkBlitImageInfo2KHR - Structure specifying parameters of blit image+-- command+--+-- == Valid Usage+--+-- -   [[VUID-{refpage}-pRegions-00215]] The source region specified by+--     each element of @pRegions@ /must/ be a region that is contained+--     within @srcImage@+--+-- -   [[VUID-{refpage}-pRegions-00216]] The destination region specified+--     by each element of @pRegions@ /must/ be a region that is contained+--     within @dstImage@+--+-- -   [[VUID-{refpage}-pRegions-00217]] The union of all destination+--     regions, specified by the elements of @pRegions@, /must/ not overlap+--     in memory with any texel that /may/ be sampled during the blit+--     operation+--+-- -   [[VUID-{refpage}-srcImage-01999]] The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_SRC_BIT'+--+-- -   [[VUID-{refpage}-srcImage-01561]] @srcImage@ /must/ not use a format+--     listed in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>+--+-- -   [[VUID-{refpage}-srcImage-00219]] @srcImage@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   [[VUID-{refpage}-srcImage-00220]] If @srcImage@ is non-sparse then+--     it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   [[VUID-{refpage}-srcImageLayout-00221]] @srcImageLayout@ /must/+--     specify the layout of the image subresources of @srcImage@ specified+--     in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   [[VUID-{refpage}-srcImageLayout-01398]] @srcImageLayout@ /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   [[VUID-{refpage}-dstImage-02000]] The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @dstImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_BLIT_DST_BIT'+--+-- -   [[VUID-{refpage}-dstImage-01562]] @dstImage@ /must/ not use a format+--     listed in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion ???>+--+-- -   [[VUID-{refpage}-dstImage-00224]] @dstImage@ /must/ have been+--     created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   [[VUID-{refpage}-dstImage-00225]] If @dstImage@ is non-sparse then+--     it /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   [[VUID-{refpage}-dstImageLayout-00226]] @dstImageLayout@ /must/+--     specify the layout of the image subresources of @dstImage@ specified+--     in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   [[VUID-{refpage}-dstImageLayout-01399]] @dstImageLayout@ /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   [[VUID-{refpage}-srcImage-00229]] If either of @srcImage@ or+--     @dstImage@ was created with a signed integer+--     'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been+--     created with a signed integer 'Vulkan.Core10.Enums.Format.Format'+--+-- -   [[VUID-{refpage}-srcImage-00230]] If either of @srcImage@ or+--     @dstImage@ was created with an unsigned integer+--     'Vulkan.Core10.Enums.Format.Format', the other /must/ also have been+--     created with an unsigned integer 'Vulkan.Core10.Enums.Format.Format'+--+-- -   [[VUID-{refpage}-srcImage-00231]] If either of @srcImage@ or+--     @dstImage@ was created with a depth\/stencil format, the other+--     /must/ have exactly the same format+--+-- -   [[VUID-{refpage}-srcImage-00232]] If @srcImage@ was created with a+--     depth\/stencil format, @filter@ /must/ be+--     'Vulkan.Core10.Enums.Filter.FILTER_NEAREST'+--+-- -   [[VUID-{refpage}-srcImage-00233]] @srcImage@ /must/ have been+--     created with a @samples@ value of+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   [[VUID-{refpage}-dstImage-00234]] @dstImage@ /must/ have been+--     created with a @samples@ value of+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   [[VUID-{refpage}-filter-02001]] If @filter@ is+--     'Vulkan.Core10.Enums.Filter.FILTER_LINEAR', then the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   [[VUID-{refpage}-filter-02002]] If @filter@ is+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', then the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   [[VUID-{refpage}-filter-00237]] If @filter@ is+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT', @srcImage@+--     /must/ be of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D'+--+-- -   [[VUID-{refpage}-srcSubresource-01705]] The+--     @srcSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- -   [[VUID-{refpage}-dstSubresource-01706]] The+--     @dstSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- -   [[VUID-{refpage}-srcSubresource-01707]] The+--     @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @srcImage@ was created+--+-- -   [[VUID-{refpage}-dstSubresource-01708]] The+--     @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @dstImage@ was created+--+-- -   [[VUID-{refpage}-dstImage-02545]] @dstImage@ and @srcImage@ /must/+--     not have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   [[VUID-{refpage}-srcImage-00240]] If either @srcImage@ or @dstImage@+--     is of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for+--     each element of @pRegions@, @srcSubresource.baseArrayLayer@ and+--     @dstSubresource.baseArrayLayer@ /must/ each be @0@, and+--     @srcSubresource.layerCount@ and @dstSubresource.layerCount@ /must/+--     each be @1@.+--+-- -   [[VUID-{refpage}-aspectMask-00241]] For each element of @pRegions@,+--     @srcSubresource.aspectMask@ /must/ specify aspects present in+--     @srcImage@+--+-- -   [[VUID-{refpage}-aspectMask-00242]] For each element of @pRegions@,+--     @dstSubresource.aspectMask@ /must/ specify aspects present in+--     @dstImage@+--+-- -   [[VUID-{refpage}-srcOffset-00243]] For each element of @pRegions@,+--     @srcOffset@[0].x and @srcOffset@[1].x /must/ both be greater than or+--     equal to @0@ and less than or equal to the width of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   [[VUID-{refpage}-srcOffset-00244]] For each element of @pRegions@,+--     @srcOffset@[0].y and @srcOffset@[1].y /must/ both be greater than or+--     equal to @0@ and less than or equal to the height of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   [[VUID-{refpage}-srcImage-00245]] If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @srcOffset@[0].y /must/ be @0@ and @srcOffset@[1].y+--     /must/ be @1@+--+-- -   [[VUID-{refpage}-srcOffset-00246]] For each element of @pRegions@,+--     @srcOffset@[0].z and @srcOffset@[1].z /must/ both be greater than or+--     equal to @0@ and less than or equal to the depth of the specified+--     @srcSubresource@ of @srcImage@+--+-- -   [[VUID-{refpage}-srcImage-00247]] If @srcImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @srcOffset@[0].z /must/ be @0@ and @srcOffset@[1].z+--     /must/ be @1@+--+-- -   [[VUID-{refpage}-dstOffset-00248]] For each element of @pRegions@,+--     @dstOffset@[0].x and @dstOffset@[1].x /must/ both be greater than or+--     equal to @0@ and less than or equal to the width of the specified+--     @dstSubresource@ of @dstImage@+--+-- -   [[VUID-{refpage}-dstOffset-00249]] For each element of @pRegions@,+--     @dstOffset@[0].y and @dstOffset@[1].y /must/ both be greater than or+--     equal to @0@ and less than or equal to the height of the specified+--     @dstSubresource@ of @dstImage@+--+-- -   [[VUID-{refpage}-dstImage-00250]] If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each element+--     of @pRegions@, @dstOffset@[0].y /must/ be @0@ and @dstOffset@[1].y+--     /must/ be @1@+--+-- -   [[VUID-{refpage}-dstOffset-00251]] For each element of @pRegions@,+--     @dstOffset@[0].z and @dstOffset@[1].z /must/ both be greater than or+--     equal to @0@ and less than or equal to the depth of the specified+--     @dstSubresource@ of @dstImage@+--+-- -   [[VUID-{refpage}-dstImage-00252]] If @dstImage@ is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @dstOffset@[0].z /must/ be @0@ and @dstOffset@[1].z+--     /must/ be @1@+--+-- -   #VUID-VkBlitImageInfo2KHR-pRegions-04561# If any element of+--     @pRegions@ contains+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, then @srcImage@ and @dstImage@ /must/ not be a+--     block-compressed image.+--+-- -   #VUID-VkBlitImageInfo2KHR-pRegions-04562# If any element of+--     @pRegions@ contains+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, then the @srcImage@ /must/ be of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and /must/ not be a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkBlitImageInfo2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR'+--+-- -   #VUID-VkBlitImageInfo2KHR-pNext-pNext# @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkBlitImageInfo2KHR-srcImage-parameter# @srcImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-VkBlitImageInfo2KHR-srcImageLayout-parameter# @srcImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-VkBlitImageInfo2KHR-dstImage-parameter# @dstImage@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-VkBlitImageInfo2KHR-dstImageLayout-parameter# @dstImageLayout@+--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'+--     value+--+-- -   #VUID-VkBlitImageInfo2KHR-pRegions-parameter# @pRegions@ /must/ be a+--     valid pointer to an array of @regionCount@ valid 'ImageBlit2KHR'+--     structures+--+-- -   #VUID-VkBlitImageInfo2KHR-filter-parameter# @filter@ /must/ be a+--     valid 'Vulkan.Core10.Enums.Filter.Filter' value+--+-- -   #VUID-VkBlitImageInfo2KHR-regionCount-arraylength# @regionCount@+--     /must/ be greater than @0@+--+-- -   #VUID-VkBlitImageInfo2KHR-commonparent# Both of @dstImage@, and+--     @srcImage@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.Filter.Filter', 'Vulkan.Core10.Handles.Image',+-- 'ImageBlit2KHR', 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'cmdBlitImage2KHR'+data BlitImageInfo2KHR = BlitImageInfo2KHR+  { -- | @srcImage@ is the source image.+    srcImage :: Image+  , -- | @srcImageLayout@ is the layout of the source image subresources for the+    -- blit.+    srcImageLayout :: ImageLayout+  , -- | @dstImage@ is the destination image.+    dstImage :: Image+  , -- | @dstImageLayout@ is the layout of the destination image subresources for+    -- the blit.+    dstImageLayout :: ImageLayout+  , -- | @pRegions@ is a pointer to an array of 'ImageBlit2KHR' structures+    -- specifying the regions to blit.+    regions :: Vector (SomeStruct ImageBlit2KHR)+  , -- | @filter@ is a 'Vulkan.Core10.Enums.Filter.Filter' specifying the filter+    -- to apply if the blits require scaling.+    filter' :: Filter+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (BlitImageInfo2KHR)+#endif+deriving instance Show BlitImageInfo2KHR++instance ToCStruct BlitImageInfo2KHR where+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p BlitImageInfo2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (dstImage)+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (dstImageLayout)+    lift $ poke ((p `plusPtr` 44 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))+    pPRegions' <- ContT $ allocaBytesAligned @(ImageBlit2KHR _) ((Data.Vector.length (regions)) * 96) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (96 * (i)) :: Ptr (ImageBlit2KHR _))) (e) . ($ ())) (regions)+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (ImageBlit2KHR _)))) (pPRegions')+    lift $ poke ((p `plusPtr` 56 :: Ptr Filter)) (filter')+    lift $ f+  cStructSize = 64+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)+    lift $ poke ((p `plusPtr` 32 :: Ptr Image)) (zero)+    lift $ poke ((p `plusPtr` 40 :: Ptr ImageLayout)) (zero)+    pPRegions' <- ContT $ allocaBytesAligned @(ImageBlit2KHR _) ((Data.Vector.length (mempty)) * 96) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (96 * (i)) :: Ptr (ImageBlit2KHR _))) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (ImageBlit2KHR _)))) (pPRegions')+    lift $ poke ((p `plusPtr` 56 :: Ptr Filter)) (zero)+    lift $ f++instance FromCStruct BlitImageInfo2KHR where+  peekCStruct p = do+    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))+    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))+    dstImage <- peek @Image ((p `plusPtr` 32 :: Ptr Image))+    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 40 :: Ptr ImageLayout))+    regionCount <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))+    pRegions <- peek @(Ptr (ImageBlit2KHR _)) ((p `plusPtr` 48 :: Ptr (Ptr (ImageBlit2KHR a))))+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekSomeCStruct (forgetExtensions ((pRegions `advancePtrBytes` (96 * (i)) :: Ptr (ImageBlit2KHR _)))))+    filter' <- peek @Filter ((p `plusPtr` 56 :: Ptr Filter))+    pure $ BlitImageInfo2KHR+             srcImage srcImageLayout dstImage dstImageLayout pRegions' filter'++instance Zero BlitImageInfo2KHR where+  zero = BlitImageInfo2KHR+           zero+           zero+           zero+           zero+           mempty+           zero+++-- | VkCopyBufferToImageInfo2KHR - Structure specifying parameters of a+-- buffer to image copy command+--+-- == Valid Usage+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-04565# If the image+--     region specified by each element of @pRegions@ does not contain+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, it /must/ be a region that is contained within+--     @dstImage@ if the @dstImage@’s 'Vulkan.Core10.Enums.Format.Format'+--     is not a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     and /must/ be a region that is contained within the plane being+--     copied to if the @dstImage@’s 'Vulkan.Core10.Enums.Format.Format' is+--     a multi-planar format+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-04554# If the image+--     region specified by each element of @pRegions@ does contain+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, the rotated destination region as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-rotation-addressing>+--     /must/ be contained within @dstImage@.+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-04555# If any element of+--     @pRegions@ contains+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, then the @dstImage@ /must/ not be a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>.+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-04556# If any element of+--     @pRegions@ contains+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, then the @dstImage@ /must/ be of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D' and /must/ not be a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>.+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-00171# @srcBuffer@ /must/+--     be large enough to contain all buffer locations that are accessed+--     according to+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,+--     for each element of @pRegions@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-00173# The union of all+--     source regions, and the union of all destination regions, specified+--     by the elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-srcBuffer-00174# @srcBuffer@+--     /must/ have been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImage-01997# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @dstImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_DST_BIT'+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-srcBuffer-00176# If @srcBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImage-00177# @dstImage@ /must/+--     have been created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImage-00178# If @dstImage@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImage-00179# @dstImage@ /must/+--     have a sample count equal to+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImageLayout-00180#+--     @dstImageLayout@ /must/ specify the layout of the image subresources+--     of @dstImage@ specified in @pRegions@ at the time this command is+--     executed on a 'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImageLayout-01396#+--     @dstImageLayout@ /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageSubresource-01701# The+--     @imageSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageSubresource-01702# The+--     @imageSubresource.baseArrayLayer@ + @imageSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @dstImage@ was created+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageOffset-01793# The+--     @imageOffset@ and @imageExtent@ members of each element of+--     @pRegions@ /must/ respect the image transfer granularity+--     requirements of @commandBuffer@’s command pool’s queue family, as+--     described in+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImage-02543# @dstImage@ /must/+--     not have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-commandBuffer-04052# If the queue+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which+--     @commandBuffer@ was allocated from does not support+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImage-04053# If @dstImage@ has+--     a depth\/stencil format, the @bufferOffset@ member of any element of+--     @pRegions@ /must/ be a multiple of @4@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-commandBuffer-04477# If the queue+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which+--     @commandBuffer@ was allocated from does not support+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT', for each+--     element of @pRegions@, the @aspectMask@ member of @imageSubresource@+--     /must/ not be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'.+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageOffset-00197# For each+--     element of @pRegions@ not containing+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, , @imageOffset.x@ and (@imageExtent.width@ ++--     @imageOffset.x@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the width of the specified @imageSubresource@+--     of @dstImage@ where this refers to the width of the /plane/ of the+--     image involved in the copy in the case of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageOffset-00198# For each+--     element of @pRegions@ not containing+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, , @imageOffset.y@ and (imageExtent.height ++--     @imageOffset.y@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the height of the specified @imageSubresource@+--     of @dstImage@ where this refers to the height of the /plane/ of the+--     image involved in the copy in the case of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-bufferOffset-01558# If @dstImage@+--     does not have either a depth\/stencil or a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a+--     multiple of the format’s texel block size+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-bufferOffset-01559# If @dstImage@+--     has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a+--     multiple of the element size of the compatible format for the format+--     and the @aspectMask@ of the @imageSubresource@ as defined in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-srcImage-00199# If @dstImage@ is+--     of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each+--     element of @pRegions@, @imageOffset.y@ /must/ be @0@ and+--     @imageExtent.height@ /must/ be @1@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageOffset-00200# For each+--     element of @pRegions@, @imageOffset.z@ and (imageExtent.depth ++--     @imageOffset.z@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the depth of the specified @imageSubresource@+--     of @dstImage@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-srcImage-00201# If @dstImage@ is+--     of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@+--     /must/ be @1@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-bufferRowLength-00203# If+--     @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferRowLength@ /must/ be a+--     multiple of the compressed texel block width+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-bufferImageHeight-00204# If+--     @dstImage@ is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferImageHeight@ /must/ be a+--     multiple of the compressed texel block height+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageOffset-00205# If @dstImage@+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, all members of @imageOffset@ /must/+--     be a multiple of the corresponding dimensions of the compressed+--     texel block+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-bufferOffset-00206# If @dstImage@+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple+--     of the compressed texel block size in bytes+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageExtent-00207# If @dstImage@+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.width@ /must/ be a+--     multiple of the compressed texel block width or (@imageExtent.width@+--     + @imageOffset.x@) /must/ equal the width of the specified+--     @imageSubresource@ of @dstImage@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageExtent-00208# If @dstImage@+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.height@ /must/ be a+--     multiple of the compressed texel block height or+--     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of+--     the specified @imageSubresource@ of @dstImage@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-imageExtent-00209# If @dstImage@+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.depth@ /must/ be a+--     multiple of the compressed texel block depth or (@imageExtent.depth@+--     + @imageOffset.z@) /must/ equal the depth of the specified+--     @imageSubresource@ of @dstImage@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-aspectMask-00211# For each element+--     of @pRegions@, @imageSubresource.aspectMask@ /must/ specify aspects+--     present in @dstImage@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-aspectMask-01560# If @dstImage@+--     has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @imageSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--     (with+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--     valid only for image formats with three planes)+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-baseArrayLayer-00213# If+--     @dstImage@ is of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D',+--     for each element of @pRegions@, @imageSubresource.baseArrayLayer@+--     /must/ be @0@ and @imageSubresource.layerCount@ /must/ be @1@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR'+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-srcBuffer-parameter# @srcBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImage-parameter# @dstImage@+--     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-dstImageLayout-parameter#+--     @dstImageLayout@ /must/ be a valid+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-pRegions-parameter# @pRegions@+--     /must/ be a valid pointer to an array of @regionCount@ valid+--     'BufferImageCopy2KHR' structures+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-regionCount-arraylength#+--     @regionCount@ /must/ be greater than @0@+--+-- -   #VUID-VkCopyBufferToImageInfo2KHR-commonparent# Both of @dstImage@,+--     and @srcBuffer@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy2KHR',+-- 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'cmdCopyBufferToImage2KHR'+data CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2KHR+  { -- | @srcBuffer@ is the source buffer.+    srcBuffer :: Buffer+  , -- | @dstImage@ is the destination image.+    dstImage :: Image+  , -- | @dstImageLayout@ is the layout of the destination image subresources for+    -- the copy.+    dstImageLayout :: ImageLayout+  , -- | @pRegions@ is a pointer to an array of 'BufferImageCopy2KHR' structures+    -- specifying the regions to copy.+    regions :: Vector (SomeStruct BufferImageCopy2KHR)+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (CopyBufferToImageInfo2KHR)+#endif+deriving instance Show CopyBufferToImageInfo2KHR++instance ToCStruct CopyBufferToImageInfo2KHR where+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p CopyBufferToImageInfo2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (srcBuffer)+    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (dstImage)+    lift $ poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (dstImageLayout)+    lift $ poke ((p `plusPtr` 36 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))+    pPRegions' <- ContT $ allocaBytesAligned @(BufferImageCopy2KHR _) ((Data.Vector.length (regions)) * 72) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (72 * (i)) :: Ptr (BufferImageCopy2KHR _))) (e) . ($ ())) (regions)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (BufferImageCopy2KHR _)))) (pPRegions')+    lift $ f+  cStructSize = 48+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Buffer)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr Image)) (zero)+    lift $ poke ((p `plusPtr` 32 :: Ptr ImageLayout)) (zero)+    pPRegions' <- ContT $ allocaBytesAligned @(BufferImageCopy2KHR _) ((Data.Vector.length (mempty)) * 72) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (72 * (i)) :: Ptr (BufferImageCopy2KHR _))) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (BufferImageCopy2KHR _)))) (pPRegions')+    lift $ f++instance FromCStruct CopyBufferToImageInfo2KHR where+  peekCStruct p = do+    srcBuffer <- peek @Buffer ((p `plusPtr` 16 :: Ptr Buffer))+    dstImage <- peek @Image ((p `plusPtr` 24 :: Ptr Image))+    dstImageLayout <- peek @ImageLayout ((p `plusPtr` 32 :: Ptr ImageLayout))+    regionCount <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))+    pRegions <- peek @(Ptr (BufferImageCopy2KHR _)) ((p `plusPtr` 40 :: Ptr (Ptr (BufferImageCopy2KHR a))))+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekSomeCStruct (forgetExtensions ((pRegions `advancePtrBytes` (72 * (i)) :: Ptr (BufferImageCopy2KHR _)))))+    pure $ CopyBufferToImageInfo2KHR+             srcBuffer dstImage dstImageLayout pRegions'++instance Zero CopyBufferToImageInfo2KHR where+  zero = CopyBufferToImageInfo2KHR+           zero+           zero+           zero+           mempty+++-- | VkCopyImageToBufferInfo2KHR - Structure specifying parameters of a image+-- to buffer copy command+--+-- == Valid Usage+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-04566# If the image+--     region specified by each element of @pRegions@ does not contain+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, it /must/ be a region that is contained within+--     @srcImage@ if the @srcImage@’s 'Vulkan.Core10.Enums.Format.Format'+--     is not a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     and /must/ be a region that is contained within the plane being+--     copied if the @srcImage@’s 'Vulkan.Core10.Enums.Format.Format' is a+--     multi-planar format+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-04557# If the image+--     region specified by each element of @pRegions@ does contain+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, the rotated source region as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-rotation-addressing>+--     /must/ be contained within @srcImage@.+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-04558# If any element of+--     @pRegions@ contains+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, then the @srcImage@ /must/ not be a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-04559# If any element of+--     @pRegions@ contains+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, then the @srcImage@ /must/ be of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', and /must/ not be a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>.+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-00183# @dstBuffer@ /must/+--     be large enough to contain all buffer locations that are accessed+--     according to+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#copies-buffers-images-addressing Buffer and Image Addressing>,+--     for each element of @pRegions@+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-00184# The union of all+--     source regions, and the union of all destination regions, specified+--     by the elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-00186# @srcImage@ /must/+--     have been created with+--     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_TRANSFER_SRC_BIT'+--     usage flag+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-01998# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @srcImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_TRANSFER_SRC_BIT'+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-00187# If @srcImage@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-dstBuffer-00191# @dstBuffer@+--     /must/ have been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_TRANSFER_DST_BIT'+--     usage flag+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-dstBuffer-00192# If @dstBuffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-00188# @srcImage@ /must/+--     have a sample count equal to+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImageLayout-00189#+--     @srcImageLayout@ /must/ specify the layout of the image subresources+--     of @srcImage@ specified in @pRegions@ at the time this command is+--     executed on a 'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImageLayout-01397#+--     @srcImageLayout@ /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL', or+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR'+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageSubresource-01703# The+--     @imageSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageSubresource-01704# The+--     @imageSubresource.baseArrayLayer@ + @imageSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @srcImage@ was created+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageOffset-01794# The+--     @imageOffset@ and @imageExtent@ members of each element of+--     @pRegions@ /must/ respect the image transfer granularity+--     requirements of @commandBuffer@’s command pool’s queue family, as+--     described in+--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-02544# @srcImage@ /must/+--     not have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-commandBuffer-04054# If the queue+--     family used to create the 'Vulkan.Core10.Handles.CommandPool' which+--     @commandBuffer@ was allocated from does not support+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' or+--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', the+--     @bufferOffset@ member of any element of @pRegions@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-04055# If @srcImage@ has+--     a depth\/stencil format, the @bufferOffset@ member of any element of+--     @pRegions@ /must/ be a multiple of @4@+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageOffset-00197# For each+--     element of @pRegions@ not containing+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, , @imageOffset.x@ and (@imageExtent.width@ ++--     @imageOffset.x@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the width of the specified @imageSubresource@+--     of @srcImage@ where this refers to the width of the /plane/ of the+--     image involved in the copy in the case of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageOffset-00198# For each+--     element of @pRegions@ not containing+--     'Vulkan.Extensions.VK_QCOM_rotated_copy_commands.CopyCommandTransformInfoQCOM'+--     in its @pNext@ chain, , @imageOffset.y@ and (imageExtent.height ++--     @imageOffset.y@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the height of the specified @imageSubresource@+--     of @srcImage@ where this refers to the height of the /plane/ of the+--     image involved in the copy in the case of a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-bufferOffset-01558# If+--     {imageparam} does not have either a depth\/stencil or a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a+--     multiple of the format’s texel block size+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-bufferOffset-01559# If+--     {imageparam} has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @bufferOffset@ /must/ be a+--     multiple of the element size of the compatible format for the format+--     and the @aspectMask@ of the @imageSubresource@ as defined in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatible-planes ???>+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-00199# If {imageparam} is+--     of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each+--     element of @pRegions@, @imageOffset.y@ /must/ be @0@ and+--     @imageExtent.height@ /must/ be @1@+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageOffset-00200# For each+--     element of @pRegions@, @imageOffset.z@ and (imageExtent.depth ++--     @imageOffset.z@) /must/ both be greater than or equal to @0@ and+--     less than or equal to the depth of the specified @imageSubresource@+--     of {imageparam}+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-00201# If {imageparam} is+--     of type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @imageOffset.z@ /must/ be @0@ and @imageExtent.depth@+--     /must/ be @1@+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-bufferRowLength-00203# If+--     {imageparam} is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferRowLength@ /must/ be a+--     multiple of the compressed texel block width+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-bufferImageHeight-00204# If+--     {imageparam} is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferImageHeight@ /must/ be a+--     multiple of the compressed texel block height+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageOffset-00205# If {imageparam}+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, all members of @imageOffset@ /must/+--     be a multiple of the corresponding dimensions of the compressed+--     texel block+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-bufferOffset-00206# If+--     {imageparam} is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @bufferOffset@ /must/ be a multiple+--     of the compressed texel block size in bytes+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageExtent-00207# If {imageparam}+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.width@ /must/ be a+--     multiple of the compressed texel block width or (@imageExtent.width@+--     + @imageOffset.x@) /must/ equal the width of the specified+--     @imageSubresource@ of {imageparam}+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageExtent-00208# If {imageparam}+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.height@ /must/ be a+--     multiple of the compressed texel block height or+--     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the height of+--     the specified @imageSubresource@ of {imageparam}+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-imageExtent-00209# If {imageparam}+--     is a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#blocked-image blocked image>,+--     for each element of @pRegions@, @imageExtent.depth@ /must/ be a+--     multiple of the compressed texel block depth or (@imageExtent.depth@+--     + @imageOffset.z@) /must/ equal the depth of the specified+--     @imageSubresource@ of {imageparam}+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-aspectMask-00211# For each element+--     of @pRegions@, @imageSubresource.aspectMask@ /must/ specify aspects+--     present in {imageparam}+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-aspectMask-01560# If {imageparam}+--     has a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>,+--     then for each element of @pRegions@, @imageSubresource.aspectMask@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',+--     or+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--     (with+--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'+--     valid only for image formats with three planes)+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-baseArrayLayer-00213# If+--     {imageparam} is of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', for each element of+--     @pRegions@, @imageSubresource.baseArrayLayer@ /must/ be @0@ and+--     @imageSubresource.layerCount@ /must/ be @1@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR'+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImage-parameter# @srcImage@+--     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-srcImageLayout-parameter#+--     @srcImageLayout@ /must/ be a valid+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-dstBuffer-parameter# @dstBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-pRegions-parameter# @pRegions@+--     /must/ be a valid pointer to an array of @regionCount@ valid+--     'BufferImageCopy2KHR' structures+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-regionCount-arraylength#+--     @regionCount@ /must/ be greater than @0@+--+-- -   #VUID-VkCopyImageToBufferInfo2KHR-commonparent# Both of @dstBuffer@,+--     and @srcImage@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'BufferImageCopy2KHR',+-- 'Vulkan.Core10.Handles.Image',+-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'cmdCopyImageToBuffer2KHR'+data CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2KHR+  { -- | @srcImage@ is the source image.+    srcImage :: Image+  , -- | @srcImageLayout@ is the layout of the source image subresources for the+    -- copy.+    srcImageLayout :: ImageLayout+  , -- | @dstBuffer@ is the destination buffer.+    dstBuffer :: Buffer+  , -- | @pRegions@ is a pointer to an array of 'BufferImageCopy2KHR' structures+    -- specifying the regions to copy.+    regions :: Vector (SomeStruct BufferImageCopy2KHR)+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (CopyImageToBufferInfo2KHR)+#endif+deriving instance Show CopyImageToBufferInfo2KHR++instance ToCStruct CopyImageToBufferInfo2KHR where+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p CopyImageToBufferInfo2KHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (srcImage)+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (srcImageLayout)+    lift $ poke ((p `plusPtr` 32 :: Ptr Buffer)) (dstBuffer)+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (regions)) :: Word32))+    pPRegions' <- ContT $ allocaBytesAligned @(BufferImageCopy2KHR _) ((Data.Vector.length (regions)) * 72) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (72 * (i)) :: Ptr (BufferImageCopy2KHR _))) (e) . ($ ())) (regions)+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (BufferImageCopy2KHR _)))) (pPRegions')+    lift $ f+  cStructSize = 56+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Image)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr ImageLayout)) (zero)+    lift $ poke ((p `plusPtr` 32 :: Ptr Buffer)) (zero)+    pPRegions' <- ContT $ allocaBytesAligned @(BufferImageCopy2KHR _) ((Data.Vector.length (mempty)) * 72) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPRegions' `plusPtr` (72 * (i)) :: Ptr (BufferImageCopy2KHR _))) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (BufferImageCopy2KHR _)))) (pPRegions')+    lift $ f++instance FromCStruct CopyImageToBufferInfo2KHR where+  peekCStruct p = do+    srcImage <- peek @Image ((p `plusPtr` 16 :: Ptr Image))+    srcImageLayout <- peek @ImageLayout ((p `plusPtr` 24 :: Ptr ImageLayout))+    dstBuffer <- peek @Buffer ((p `plusPtr` 32 :: Ptr Buffer))+    regionCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))+    pRegions <- peek @(Ptr (BufferImageCopy2KHR _)) ((p `plusPtr` 48 :: Ptr (Ptr (BufferImageCopy2KHR a))))+    pRegions' <- generateM (fromIntegral regionCount) (\i -> peekSomeCStruct (forgetExtensions ((pRegions `advancePtrBytes` (72 * (i)) :: Ptr (BufferImageCopy2KHR _)))))+    pure $ CopyImageToBufferInfo2KHR+             srcImage srcImageLayout dstBuffer pRegions'++instance Zero CopyImageToBufferInfo2KHR where+  zero = CopyImageToBufferInfo2KHR+           zero+           zero+           zero+           mempty+++-- | VkResolveImageInfo2KHR - Structure specifying parameters of resolve+-- image command+--+-- == Valid Usage+--+-- -   #VUID-VkResolveImageInfo2KHR-pRegions-00255# The union of all source+--     regions, and the union of all destination regions, specified by the+--     elements of @pRegions@, /must/ not overlap in memory+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImage-00256# If @srcImage@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImage-00257# @srcImage@ /must/ have+--     a sample count equal to any valid sample count value other than+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImage-00258# If @dstImage@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImage-00259# @dstImage@ /must/ have+--     a sample count equal to+--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT'+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImageLayout-00260# @srcImageLayout@+--     /must/ specify the layout of the image subresources of @srcImage@+--     specified in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImageLayout-01400# @srcImageLayout@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImageLayout-00262# @dstImageLayout@+--     /must/ specify the layout of the image subresources of @dstImage@+--     specified in @pRegions@ at the time this command is executed on a+--     'Vulkan.Core10.Handles.Device'+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImageLayout-01401# @dstImageLayout@+--     /must/ be+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR',+--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL'+--     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL'+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImage-02003# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-format-features format features>+--     of @dstImage@ /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BIT'+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImage-01386# @srcImage@ and+--     @dstImage@ /must/ have been created with the same image format+--+-- -   #VUID-VkResolveImageInfo2KHR-srcSubresource-01709# The+--     @srcSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @srcImage@ was created+--+-- -   #VUID-VkResolveImageInfo2KHR-dstSubresource-01710# The+--     @dstSubresource.mipLevel@ member of each element of @pRegions@+--     /must/ be less than the @mipLevels@ specified in+--     'Vulkan.Core10.Image.ImageCreateInfo' when @dstImage@ was created+--+-- -   #VUID-VkResolveImageInfo2KHR-srcSubresource-01711# The+--     @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @srcImage@ was created+--+-- -   #VUID-VkResolveImageInfo2KHR-dstSubresource-01712# The+--     @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of+--     each element of @pRegions@ /must/ be less than or equal to the+--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'+--     when @dstImage@ was created+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImage-02546# @dstImage@ and+--     @srcImage@ /must/ not have been created with @flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SUBSAMPLED_BIT_EXT'+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImage-04446# If either @srcImage@ or+--     @dstImage@ are of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+--     of @pRegions@, @srcSubresource.baseArrayLayer@ /must/ be @0@ and+--     @srcSubresource.layerCount@ /must/ be @1@+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImage-04447# If either @srcImage@ or+--     @dstImage@ are of type+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_3D', then for each element+--     of @pRegions@, @dstSubresource.baseArrayLayer@ /must/ be @0@ and+--     @dstSubresource.layerCount@ /must/ be @1@+--+-- -   #VUID-VkResolveImageInfo2KHR-srcOffset-00269# For each element of+--     @pRegions@, @srcOffset.x@ and (@extent.width@ + @srcOffset.x@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the width of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkResolveImageInfo2KHR-srcOffset-00270# For each element of+--     @pRegions@, @srcOffset.y@ and (@extent.height@ + @srcOffset.y@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the height of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImage-00271# If @srcImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each+--     element of @pRegions@, @srcOffset.y@ /must/ be @0@ and+--     @extent.height@ /must/ be @1@+--+-- -   #VUID-VkResolveImageInfo2KHR-srcOffset-00272# For each element of+--     @pRegions@, @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the depth of the specified @srcSubresource@ of @srcImage@+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImage-00273# If @srcImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/+--     be @1@+--+-- -   #VUID-VkResolveImageInfo2KHR-dstOffset-00274# For each element of+--     @pRegions@, @dstOffset.x@ and (@extent.width@ + @dstOffset.x@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the width of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-VkResolveImageInfo2KHR-dstOffset-00275# For each element of+--     @pRegions@, @dstOffset.y@ and (@extent.height@ + @dstOffset.y@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the height of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImage-00276# If @dstImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D', then for each+--     element of @pRegions@, @dstOffset.y@ /must/ be @0@ and+--     @extent.height@ /must/ be @1@+--+-- -   #VUID-VkResolveImageInfo2KHR-dstOffset-00277# For each element of+--     @pRegions@, @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@)+--     /must/ both be greater than or equal to @0@ and less than or equal+--     to the depth of the specified @dstSubresource@ of @dstImage@+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImage-00278# If @dstImage@ is of+--     type 'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_1D' or+--     'Vulkan.Core10.Enums.ImageType.IMAGE_TYPE_2D', then for each element+--     of @pRegions@, @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/+--     be @1@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkResolveImageInfo2KHR-sType-sType# @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR'+--+-- -   #VUID-VkResolveImageInfo2KHR-pNext-pNext# @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImage-parameter# @srcImage@ /must/+--     be a valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-VkResolveImageInfo2KHR-srcImageLayout-parameter#+--     @srcImageLayout@ /must/ be a valid+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImage-parameter# @dstImage@ /must/+--     be a valid 'Vulkan.Core10.Handles.Image' handle+--+-- -   #VUID-VkResolveImageInfo2KHR-dstImageLayout-parameter#+--     @dstImageLayout@ /must/ be a valid+--     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value+--+-- -   #VUID-VkResolveImageInfo2KHR-pRegions-parameter# @pRegions@ /must/+--     be a valid pointer to an array of @regionCount@ valid+--     'ImageResolve2KHR' structures+--+-- -   #VUID-VkResolveImageInfo2KHR-regionCount-arraylength# @regionCount@+--     /must/ be greater than @0@+--+-- -   #VUID-VkResolveImageInfo2KHR-commonparent# Both of @dstImage@, and+--     @srcImage@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Device' -- -- = See Also --
src/Vulkan/Extensions/VK_KHR_deferred_host_operations.hs view
@@ -76,13 +76,16 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateDeferredOperationKHR-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateDeferredOperationKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pDeferredOperation@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateDeferredOperationKHR-pDeferredOperation-parameter#+--     @pDeferredOperation@ /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.DeferredOperationKHR' handle -- -- == Return Codes@@ -148,29 +151,36 @@ -- -- == Valid Usage ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDeferredOperationKHR-operation-03434# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @operation@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyDeferredOperationKHR-operation-03435# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @operation@ was created, @pAllocator@ /must/ be @NULL@ ----- -   @operation@ /must/ be completed+-- -   #VUID-vkDestroyDeferredOperationKHR-operation-03436# @operation@+--     /must/ be completed -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyDeferredOperationKHR-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @operation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkDestroyDeferredOperationKHR-operation-parameter# If+--     @operation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @operation@ /must/ be a valid --     'Vulkan.Extensions.Handles.DeferredOperationKHR' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroyDeferredOperationKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @operation@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkDestroyDeferredOperationKHR-operation-parent# If @operation@+--     is a valid handle, it /must/ have been created, allocated, or+--     retrieved from @device@ -- -- == Host Synchronization --@@ -262,13 +272,16 @@                                        . (MonadIO io)                                       => -- | @device@ is the device which owns @operation@.                                          ---                                         -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                         -- #VUID-vkGetDeferredOperationMaxConcurrencyKHR-device-parameter# @device@+                                         -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                          Device                                       -> -- | @operation@ is the deferred operation to be queried.                                          --+                                         -- #VUID-vkGetDeferredOperationMaxConcurrencyKHR-operation-parameter#                                          -- @operation@ /must/ be a valid                                          -- 'Vulkan.Extensions.Handles.DeferredOperationKHR' handle                                          --+                                         -- #VUID-vkGetDeferredOperationMaxConcurrencyKHR-operation-parent#                                          -- @operation@ /must/ have been created, allocated, or retrieved from                                          -- @device@                                          DeferredOperationKHR@@ -322,15 +335,17 @@                                . (MonadIO io)                               => -- | @device@ is the device which owns @operation@.                                  ---                                 -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                 -- #VUID-vkGetDeferredOperationResultKHR-device-parameter# @device@ /must/+                                 -- be a valid 'Vulkan.Core10.Handles.Device' handle                                  Device                               -> -- | @operation@ is the operation whose deferred result is being queried.                                  ---                                 -- @operation@ /must/ be a valid-                                 -- 'Vulkan.Extensions.Handles.DeferredOperationKHR' handle+                                 -- #VUID-vkGetDeferredOperationResultKHR-operation-parameter# @operation@+                                 -- /must/ be a valid 'Vulkan.Extensions.Handles.DeferredOperationKHR'+                                 -- handle                                  ---                                 -- @operation@ /must/ have been created, allocated, or retrieved from-                                 -- @device@+                                 -- #VUID-vkGetDeferredOperationResultKHR-operation-parent# @operation@+                                 -- /must/ have been created, allocated, or retrieved from @device@                                  DeferredOperationKHR                               -> io (Result) getDeferredOperationResultKHR device operation = liftIO $ do@@ -396,13 +411,15 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDeferredOperationJoinKHR-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @operation@ /must/ be a valid---     'Vulkan.Extensions.Handles.DeferredOperationKHR' handle+-- -   #VUID-vkDeferredOperationJoinKHR-operation-parameter# @operation@+--     /must/ be a valid 'Vulkan.Extensions.Handles.DeferredOperationKHR'+--     handle ----- -   @operation@ /must/ have been created, allocated, or retrieved from---     @device@+-- -   #VUID-vkDeferredOperationJoinKHR-operation-parent# @operation@+--     /must/ have been created, allocated, or retrieved from @device@ -- -- == Return Codes --@@ -508,12 +525,13 @@ -- -- == Valid Usage ----- -   Any previous deferred operation that was associated with---     @operationHandle@ /must/ be complete+-- -   #VUID-VkDeferredOperationInfoKHR-operationHandle-03433# Any previous+--     deferred operation that was associated with @operationHandle@ /must/+--     be complete -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDeferredOperationInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR' -- -- = See Also
src/Vulkan/Extensions/VK_KHR_display.hs view
@@ -156,12 +156,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-pProperties-parameter#+--     If the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'DisplayPropertiesKHR' structures --@@ -229,12 +232,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-pProperties-parameter#+--     If the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'DisplayPlanePropertiesKHR' --     structures@@ -307,21 +313,24 @@ -- -- == Valid Usage ----- -   @planeIndex@ /must/ be less than the number of display planes+-- -   #VUID-vkGetDisplayPlaneSupportedDisplaysKHR-planeIndex-01249#+--     @planeIndex@ /must/ be less than the number of display planes --     supported by the device as determined by calling --     'getPhysicalDeviceDisplayPlanePropertiesKHR' -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetDisplayPlaneSupportedDisplaysKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pDisplayCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetDisplayPlaneSupportedDisplaysKHR-pDisplayCount-parameter#+--     @pDisplayCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pDisplayCount@ is not @0@, and---     @pDisplays@ is not @NULL@, @pDisplays@ /must/ be a valid pointer to---     an array of @pDisplayCount@ 'Vulkan.Extensions.Handles.DisplayKHR'---     handles+-- -   #VUID-vkGetDisplayPlaneSupportedDisplaysKHR-pDisplays-parameter# If+--     the value referenced by @pDisplayCount@ is not @0@, and @pDisplays@+--     is not @NULL@, @pDisplays@ /must/ be a valid pointer to an array of+--     @pDisplayCount@ 'Vulkan.Extensions.Handles.DisplayKHR' handles -- -- == Return Codes --@@ -394,21 +403,23 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetDisplayModePropertiesKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'---     handle+-- -   #VUID-vkGetDisplayModePropertiesKHR-display-parameter# @display@+--     /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR' handle ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetDisplayModePropertiesKHR-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and---     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer---     to an array of @pPropertyCount@ 'DisplayModePropertiesKHR'---     structures+-- -   #VUID-vkGetDisplayModePropertiesKHR-pProperties-parameter# If the+--     value referenced by @pPropertyCount@ is not @0@, and @pProperties@+--     is not @NULL@, @pProperties@ /must/ be a valid pointer to an array+--     of @pPropertyCount@ 'DisplayModePropertiesKHR' structures ----- -   @display@ /must/ have been created, allocated, or retrieved from---     @physicalDevice@+-- -   #VUID-vkGetDisplayModePropertiesKHR-display-parent# @display@ /must/+--     have been created, allocated, or retrieved from @physicalDevice@ -- -- == Return Codes --@@ -465,24 +476,26 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkCreateDisplayModeKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'---     handle+-- -   #VUID-vkCreateDisplayModeKHR-display-parameter# @display@ /must/ be+--     a valid 'Vulkan.Extensions.Handles.DisplayKHR' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'DisplayModeCreateInfoKHR' structure+-- -   #VUID-vkCreateDisplayModeKHR-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'DisplayModeCreateInfoKHR'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateDisplayModeKHR-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pMode@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.DisplayModeKHR' handle+-- -   #VUID-vkCreateDisplayModeKHR-pMode-parameter# @pMode@ /must/ be a+--     valid pointer to a 'Vulkan.Extensions.Handles.DisplayModeKHR' handle ----- -   @display@ /must/ have been created, allocated, or retrieved from---     @physicalDevice@+-- -   #VUID-vkCreateDisplayModeKHR-display-parent# @display@ /must/ have+--     been created, allocated, or retrieved from @physicalDevice@ -- -- == Host Synchronization --@@ -551,13 +564,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetDisplayPlaneCapabilitiesKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @mode@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayModeKHR'---     handle+-- -   #VUID-vkGetDisplayPlaneCapabilitiesKHR-mode-parameter# @mode@ /must/+--     be a valid 'Vulkan.Extensions.Handles.DisplayModeKHR' handle ----- -   @pCapabilities@ /must/ be a valid pointer to a+-- -   #VUID-vkGetDisplayPlaneCapabilitiesKHR-pCapabilities-parameter#+--     @pCapabilities@ /must/ be a valid pointer to a --     'DisplayPlaneCapabilitiesKHR' structure -- -- == Host Synchronization@@ -618,16 +633,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateDisplayPlaneSurfaceKHR-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateDisplayPlaneSurfaceKHR-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'DisplaySurfaceCreateInfoKHR' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateDisplayPlaneSurfaceKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSurface@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateDisplayPlaneSurfaceKHR-pSurface-parameter# @pSurface@+--     /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes@@ -852,11 +871,14 @@ -- -- == Valid Usage ----- -   The @width@ member of @visibleRegion@ /must/ be greater than @0@+-- -   #VUID-VkDisplayModeParametersKHR-width-01990# The @width@ member of+--     @visibleRegion@ /must/ be greater than @0@ ----- -   The @height@ member of @visibleRegion@ /must/ be greater than @0@+-- -   #VUID-VkDisplayModeParametersKHR-height-01991# The @height@ member+--     of @visibleRegion@ /must/ be greater than @0@ ----- -   @refreshRate@ /must/ be greater than @0@+-- -   #VUID-VkDisplayModeParametersKHR-refreshRate-01992# @refreshRate@+--     /must/ be greater than @0@ -- -- = See Also --@@ -963,14 +985,16 @@ data DisplayModeCreateInfoKHR = DisplayModeCreateInfoKHR   { -- | @flags@ is reserved for future use, and /must/ be zero.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkDisplayModeCreateInfoKHR-flags-zerobitmask# @flags@ /must/ be+    -- @0@     flags :: DisplayModeCreateFlagsKHR   , -- | @parameters@ is a 'DisplayModeParametersKHR' structure describing the     -- display parameters to use in creating the new mode. If the parameters     -- are not compatible with the specified display, the implementation /must/     -- return 'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'.     ---    -- @parameters@ /must/ be a valid 'DisplayModeParametersKHR' structure+    -- #VUID-VkDisplayModeCreateInfoKHR-parameters-parameter# @parameters@+    -- /must/ be a valid 'DisplayModeParametersKHR' structure     parameters :: DisplayModeParametersKHR   }   deriving (Typeable)@@ -1155,11 +1179,13 @@ -- -- == Valid Usage ----- -   @planeIndex@ /must/ be less than the number of display planes---     supported by the device as determined by calling+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-planeIndex-01252# @planeIndex@+--     /must/ be less than the number of display planes supported by the+--     device as determined by calling --     'getPhysicalDeviceDisplayPlanePropertiesKHR' ----- -   If the @planeReorderPossible@ member of the 'DisplayPropertiesKHR'+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-planeReorderPossible-01253# If+--     the @planeReorderPossible@ member of the 'DisplayPropertiesKHR' --     structure returned by 'getPhysicalDeviceDisplayPropertiesKHR' for --     the display corresponding to @displayMode@ is --     'Vulkan.Core10.FundamentalTypes.TRUE' then @planeStackIndex@ /must/@@ -1170,34 +1196,41 @@ --     'getPhysicalDeviceDisplayPlanePropertiesKHR' for the display plane --     corresponding to @displayMode@ ----- -   If @alphaMode@ is 'DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR' then---     @globalAlpha@ /must/ be between @0@ and @1@, inclusive+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01254# If @alphaMode@+--     is 'DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR' then @globalAlpha@ /must/ be+--     between @0@ and @1@, inclusive ----- -   @alphaMode@ /must/ be @0@ or one of the bits present in the---     @supportedAlpha@ member of 'DisplayPlaneCapabilitiesKHR' returned by+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01255# @alphaMode@+--     /must/ be @0@ or one of the bits present in the @supportedAlpha@+--     member of 'DisplayPlaneCapabilitiesKHR' returned by --     'getDisplayPlaneCapabilitiesKHR' for the display plane corresponding --     to @displayMode@ ----- -   The @width@ and @height@ members of @imageExtent@ /must/ be less---     than the @maxImageDimensions2D@ member of---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-width-01256# The @width@ and+--     @height@ members of @imageExtent@ /must/ be less than+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxImageDimension2D@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-flags-zerobitmask# @flags@+--     /must/ be @0@ ----- -   @displayMode@ /must/ be a valid+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-displayMode-parameter#+--     @displayMode@ /must/ be a valid --     'Vulkan.Extensions.Handles.DisplayModeKHR' handle ----- -   @transform@ /must/ be a valid+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-transform-parameter# @transform@+--     /must/ be a valid --     'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value ----- -   @alphaMode@ /must/ be a valid 'DisplayPlaneAlphaFlagBitsKHR' value+-- -   #VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-parameter# @alphaMode@+--     /must/ be a valid 'DisplayPlaneAlphaFlagBitsKHR' value -- -- = See Also --
src/Vulkan/Extensions/VK_KHR_display_swapchain.hs view
@@ -120,21 +120,26 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateSharedSwapchainsKHR-device-parameter# @device@ /must/+--     be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfos@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCreateSharedSwapchainsKHR-pCreateInfos-parameter#+--     @pCreateInfos@ /must/ be a valid pointer to an array of --     @swapchainCount@ valid --     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR' --     structures ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateSharedSwapchainsKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSwapchains@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCreateSharedSwapchainsKHR-pSwapchains-parameter#+--     @pSwapchains@ /must/ be a valid pointer to an array of --     @swapchainCount@ 'Vulkan.Extensions.Handles.SwapchainKHR' handles ----- -   @swapchainCount@ /must/ be greater than @0@+-- -   #VUID-vkCreateSharedSwapchainsKHR-swapchainCount-arraylength#+--     @swapchainCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -209,14 +214,16 @@ -- -- == Valid Usage ----- -   @srcRect@ /must/ specify a rectangular region that is a subset of---     the image being presented+-- -   #VUID-VkDisplayPresentInfoKHR-srcRect-01257# @srcRect@ /must/+--     specify a rectangular region that is a subset of the image being+--     presented ----- -   @dstRect@ /must/ specify a rectangular region that is a subset of---     the @visibleRegion@ parameter of the display mode the swapchain---     being presented uses+-- -   #VUID-VkDisplayPresentInfoKHR-dstRect-01258# @dstRect@ /must/+--     specify a rectangular region that is a subset of the @visibleRegion@+--     parameter of the display mode the swapchain being presented uses ----- -   If the @persistentContent@ member of the+-- -   #VUID-VkDisplayPresentInfoKHR-persistentContent-01259# If the+--     @persistentContent@ member of the --     'Vulkan.Extensions.VK_KHR_display.DisplayPropertiesKHR' structure --     returned by --     'Vulkan.Extensions.VK_KHR_display.getPhysicalDeviceDisplayPropertiesKHR'@@ -225,7 +232,7 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDisplayPresentInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR' -- -- = See Also
src/Vulkan/Extensions/VK_KHR_external_fence_fd.hs view
@@ -116,13 +116,14 @@                . (MonadIO io)               => -- | @device@ is the logical device that created the fence being exported.                  ---                 -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                 -- #VUID-vkGetFenceFdKHR-device-parameter# @device@ /must/ be a valid+                 -- 'Vulkan.Core10.Handles.Device' handle                  Device               -> -- | @pGetFdInfo@ is a pointer to a 'FenceGetFdInfoKHR' structure containing                  -- parameters of the export operation.                  ---                 -- @pGetFdInfo@ /must/ be a valid pointer to a valid 'FenceGetFdInfoKHR'-                 -- structure+                 -- #VUID-vkGetFenceFdKHR-pGetFdInfo-parameter# @pGetFdInfo@ /must/ be a+                 -- valid pointer to a valid 'FenceGetFdInfoKHR' structure                  FenceGetFdInfoKHR               -> io (("fd" ::: Int32)) getFenceFdKHR device getFdInfo = liftIO . evalContT $ do@@ -177,11 +178,13 @@                   . (MonadIO io)                  => -- | @device@ is the logical device that created the fence.                     ---                    -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                    -- #VUID-vkImportFenceFdKHR-device-parameter# @device@ /must/ be a valid+                    -- 'Vulkan.Core10.Handles.Device' handle                     Device                  -> -- | @pImportFenceFdInfo@ is a pointer to a 'ImportFenceFdInfoKHR' structure                     -- specifying the fence and import parameters.                     --+                    -- #VUID-vkImportFenceFdKHR-pImportFenceFdInfo-parameter#                     -- @pImportFenceFdInfo@ /must/ be a valid pointer to a valid                     -- 'ImportFenceFdInfoKHR' structure                     ImportFenceFdInfoKHR@@ -214,11 +217,13 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ be a value included in the+-- -   #VUID-VkImportFenceFdInfoKHR-handleType-01464# @handleType@ /must/+--     be a value included in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fence-handletypes-fd Handle Types Supported by > --     table ----- -   @fd@ /must/ obey any requirements listed for @handleType@ in+-- -   #VUID-VkImportFenceFdInfoKHR-fd-01541# @fd@ /must/ obey any+--     requirements listed for @handleType@ in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility> -- -- If @handleType@ is@@ -242,17 +247,20 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImportFenceFdInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkImportFenceFdInfoKHR-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-VkImportFenceFdInfoKHR-fence-parameter# @fence@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Fence' handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkImportFenceFdInfoKHR-flags-parameter# @flags@ /must/ be a+--     valid combination of --     'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits' values ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkImportFenceFdInfoKHR-handleType-parameter# @handleType@+--     /must/ be a valid --     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits' --     value --@@ -340,35 +348,40 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ have been included in+-- -   #VUID-VkFenceGetFdInfoKHR-handleType-01453# @handleType@ /must/ have+--     been included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'::@handleTypes@ --     when @fence@’s current payload was created ----- -   If @handleType@ refers to a handle type with copy payload---     transference semantics, @fence@ /must/ be signaled, or have an---     associated+-- -   #VUID-VkFenceGetFdInfoKHR-handleType-01454# If @handleType@ refers+--     to a handle type with copy payload transference semantics, @fence@+--     /must/ be signaled, or have an associated --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation> --     pending execution ----- -   @fence@ /must/ not currently have its payload replaced by an---     imported payload as described below in+-- -   #VUID-VkFenceGetFdInfoKHR-fence-01455# @fence@ /must/ not currently+--     have its payload replaced by an imported payload as described below+--     in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads> --     unless that imported payload’s handle type was included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties'::@exportFromImportedHandleTypes@ --     for @handleType@ ----- -   @handleType@ /must/ be defined as a POSIX file descriptor handle+-- -   #VUID-VkFenceGetFdInfoKHR-handleType-01456# @handleType@ /must/ be+--     defined as a POSIX file descriptor handle -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFenceGetFdInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkFenceGetFdInfoKHR-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-VkFenceGetFdInfoKHR-fence-parameter# @fence@ /must/ be a valid+--     'Vulkan.Core10.Handles.Fence' handle ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkFenceGetFdInfoKHR-handleType-parameter# @handleType@ /must/+--     be a valid --     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits' --     value --
src/Vulkan/Extensions/VK_KHR_external_fence_win32.hs view
@@ -110,11 +110,13 @@                         . (MonadIO io)                        => -- | @device@ is the logical device that created the fence being exported.                           ---                          -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                          -- #VUID-vkGetFenceWin32HandleKHR-device-parameter# @device@ /must/ be a+                          -- valid 'Vulkan.Core10.Handles.Device' handle                           Device                        -> -- | @pGetWin32HandleInfo@ is a pointer to a 'FenceGetWin32HandleInfoKHR'                           -- structure containing parameters of the export operation.                           --+                          -- #VUID-vkGetFenceWin32HandleKHR-pGetWin32HandleInfo-parameter#                           -- @pGetWin32HandleInfo@ /must/ be a valid pointer to a valid                           -- 'FenceGetWin32HandleInfoKHR' structure                           FenceGetWin32HandleInfoKHR@@ -171,12 +173,14 @@                            . (MonadIO io)                           => -- | @device@ is the logical device that created the fence.                              ---                             -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                             -- #VUID-vkImportFenceWin32HandleKHR-device-parameter# @device@ /must/ be a+                             -- valid 'Vulkan.Core10.Handles.Device' handle                              Device                           -> -- | @pImportFenceWin32HandleInfo@ is a pointer to a                              -- 'ImportFenceWin32HandleInfoKHR' structure specifying the fence and                              -- import parameters.                              --+                             -- #VUID-vkImportFenceWin32HandleKHR-pImportFenceWin32HandleInfo-parameter#                              -- @pImportFenceWin32HandleInfo@ /must/ be a valid pointer to a valid                              -- 'ImportFenceWin32HandleInfoKHR' structure                              ImportFenceWin32HandleInfoKHR@@ -209,44 +213,54 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ be a value included in the+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-01457# @handleType@+--     /must/ be a value included in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fence-handletypes-win32 Handle Types Supported by > --     table ----- -   If @handleType@ is not+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-01459# If+--     @handleType@ is not --     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT', --     @name@ /must/ be @NULL@ ----- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/---     name a valid synchronization primitive of the type specified by+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-01460# If+--     @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/ name a+--     valid synchronization primitive of the type specified by --     @handleType@ ----- -   If @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be---     a valid handle of the type specified by @handleType@+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-01461# If+--     @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be a+--     valid handle of the type specified by @handleType@ ----- -   If @handle@ is not @NULL@, @name@ /must/ be @NULL@+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handle-01462# If @handle@ is+--     not @NULL@, @name@ /must/ be @NULL@ ----- -   If @handle@ is not @NULL@, it /must/ obey any requirements listed---     for @handleType@ in+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handle-01539# If @handle@ is+--     not @NULL@, it /must/ obey any requirements listed for @handleType@+--     in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility> ----- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for---     @handleType@ in+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-name-01540# If @name@ is not+--     @NULL@, it /must/ obey any requirements listed for @handleType@ in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-fence-handle-types-compatibility external fence handle types compatibility> -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-fence-parameter# @fence@+--     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-flags-parameter# @flags@+--     /must/ be a valid combination of --     'Vulkan.Core11.Enums.FenceImportFlagBits.FenceImportFlagBits' values ----- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid+-- -   #VUID-VkImportFenceWin32HandleInfoKHR-handleType-parameter# If+--     @handleType@ is not @0@, @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits' --     value --@@ -357,7 +371,7 @@ -- -- == Valid Usage ----- -   If+-- -   #VUID-VkExportFenceWin32HandleInfoKHR-handleTypes-01447# If --     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'::@handleTypes@ --     does not include --     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT',@@ -366,11 +380,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkExportFenceWin32HandleInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR' ----- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid---     pointer to a valid+-- -   #VUID-VkExportFenceWin32HandleInfoKHR-pAttributes-parameter# If+--     @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid pointer+--     to a valid --     'Vulkan.Extensions.VK_NV_external_memory_win32.SECURITY_ATTRIBUTES' --     value --@@ -448,40 +463,46 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ have been included in+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-handleType-01448# @handleType@+--     /must/ have been included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence.ExportFenceCreateInfo'::@handleTypes@ --     when the @fence@’s current payload was created ----- -   If @handleType@ is defined as an NT handle, 'getFenceWin32HandleKHR'---     /must/ be called no more than once for each valid unique combination---     of @fence@ and @handleType@+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-handleType-01449# If @handleType@+--     is defined as an NT handle, 'getFenceWin32HandleKHR' /must/ be+--     called no more than once for each valid unique combination of+--     @fence@ and @handleType@ ----- -   @fence@ /must/ not currently have its payload replaced by an---     imported payload as described below in+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-fence-01450# @fence@ /must/ not+--     currently have its payload replaced by an imported payload as+--     described below in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-importing Importing Fence Payloads> --     unless that imported payload’s handle type was included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_fence_capabilities.ExternalFenceProperties'::@exportFromImportedHandleTypes@ --     for @handleType@ ----- -   If @handleType@ refers to a handle type with copy payload---     transference semantics, @fence@ /must/ be signaled, or have an---     associated+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-handleType-01451# If @handleType@+--     refers to a handle type with copy payload transference semantics,+--     @fence@ /must/ be signaled, or have an associated --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-fences-signaling fence signal operation> --     pending execution ----- -   @handleType@ /must/ be defined as an NT handle or a global share---     handle+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-handleType-01452# @handleType@+--     /must/ be defined as an NT handle or a global share handle -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @fence@ /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-fence-parameter# @fence@ /must/+--     be a valid 'Vulkan.Core10.Handles.Fence' handle ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkFenceGetWin32HandleInfoKHR-handleType-parameter#+--     @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalFenceHandleTypeFlagBits.ExternalFenceHandleTypeFlagBits' --     value --
src/Vulkan/Extensions/VK_KHR_external_memory_fd.hs view
@@ -104,13 +104,14 @@                => -- | @device@ is the logical device that created the device memory being                   -- exported.                   ---                  -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                  -- #VUID-vkGetMemoryFdKHR-device-parameter# @device@ /must/ be a valid+                  -- 'Vulkan.Core10.Handles.Device' handle                   Device                -> -- | @pGetFdInfo@ is a pointer to a 'MemoryGetFdInfoKHR' structure containing                   -- parameters of the export operation.                   ---                  -- @pGetFdInfo@ /must/ be a valid pointer to a valid 'MemoryGetFdInfoKHR'-                  -- structure+                  -- #VUID-vkGetMemoryFdKHR-pGetFdInfo-parameter# @pGetFdInfo@ /must/ be a+                  -- valid pointer to a valid 'MemoryGetFdInfoKHR' structure                   MemoryGetFdInfoKHR                -> io (("fd" ::: Int32)) getMemoryFdKHR device getFdInfo = liftIO . evalContT $ do@@ -157,21 +158,24 @@                           . (MonadIO io)                          => -- | @device@ is the logical device that will be importing @fd@.                             ---                            -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                            -- #VUID-vkGetMemoryFdPropertiesKHR-device-parameter# @device@ /must/ be a+                            -- valid 'Vulkan.Core10.Handles.Device' handle                             Device                          -> -- | @handleType@ is the type of the handle @fd@.                             ---                            -- @handleType@ /must/ not be+                            -- #VUID-vkGetMemoryFdPropertiesKHR-handleType-00674# @handleType@ /must/+                            -- not be                             -- 'Vulkan.Extensions.VK_KHR_external_memory_capabilities.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR'                             ---                            -- @handleType@ /must/ be a valid+                            -- #VUID-vkGetMemoryFdPropertiesKHR-handleType-parameter# @handleType@+                            -- /must/ be a valid                             -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'                             -- value                             ExternalMemoryHandleTypeFlagBits                          -> -- | @fd@ is the handle which will be imported.                             ---                            -- @fd@ /must/ be an external memory handle created outside of the Vulkan-                            -- API+                            -- #VUID-vkGetMemoryFdPropertiesKHR-fd-00673# @fd@ /must/ be an external+                            -- memory handle created outside of the Vulkan API                             ("fd" ::: Int32)                          -> io (MemoryFdPropertiesKHR) getMemoryFdPropertiesKHR device handleType fd = liftIO . evalContT $ do@@ -204,35 +208,39 @@ -- -- == Valid Usage ----- -   If @handleType@ is not @0@, it /must/ be supported for import, as---     reported by+-- -   #VUID-VkImportMemoryFdInfoKHR-handleType-00667# If @handleType@ is+--     not @0@, it /must/ be supported for import, as reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties' --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties' ----- -   The memory from which @fd@ was exported /must/ have been created on---     the same underlying physical device as @device@+-- -   #VUID-VkImportMemoryFdInfoKHR-fd-00668# The memory from which @fd@+--     was exported /must/ have been created on the same underlying+--     physical device as @device@ ----- -   If @handleType@ is not @0@, it /must/ be defined as a POSIX file---     descriptor handle+-- -   #VUID-VkImportMemoryFdInfoKHR-handleType-00669# If @handleType@ is+--     not @0@, it /must/ be defined as a POSIX file descriptor handle ----- -   If @handleType@ is not @0@, @fd@ /must/ be a valid handle of the---     type specified by @handleType@+-- -   #VUID-VkImportMemoryFdInfoKHR-handleType-00670# If @handleType@ is+--     not @0@, @fd@ /must/ be a valid handle of the type specified by+--     @handleType@ ----- -   The memory represented by @fd@ /must/ have been created from a---     physical device and driver that is compatible with @device@ and---     @handleType@, as described in+-- -   #VUID-VkImportMemoryFdInfoKHR-fd-01746# The memory represented by+--     @fd@ /must/ have been created from a physical device and driver that+--     is compatible with @device@ and @handleType@, as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility> ----- -   @fd@ /must/ obey any requirements listed for @handleType@ in+-- -   #VUID-VkImportMemoryFdInfoKHR-fd-01520# @fd@ /must/ obey any+--     requirements listed for @handleType@ in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility> -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImportMemoryFdInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR' ----- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid+-- -   #VUID-VkImportMemoryFdInfoKHR-handleType-parameter# If @handleType@+--     is not @0@, @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits' --     value --@@ -367,17 +375,21 @@ data MemoryGetFdInfoKHR = MemoryGetFdInfoKHR   { -- | @memory@ is the memory object from which the handle will be exported.     ---    -- @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle+    -- #VUID-VkMemoryGetFdInfoKHR-memory-parameter# @memory@ /must/ be a valid+    -- 'Vulkan.Core10.Handles.DeviceMemory' handle     memory :: DeviceMemory   , -- | @handleType@ is the type of handle requested.     ---    -- @handleType@ /must/ have been included in+    -- #VUID-VkMemoryGetFdInfoKHR-handleType-00671# @handleType@ /must/ have+    -- been included in     -- 'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@     -- when @memory@ was created     ---    -- @handleType@ /must/ be defined as a POSIX file descriptor handle+    -- #VUID-VkMemoryGetFdInfoKHR-handleType-00672# @handleType@ /must/ be+    -- defined as a POSIX file descriptor handle     ---    -- @handleType@ /must/ be a valid+    -- #VUID-VkMemoryGetFdInfoKHR-handleType-parameter# @handleType@ /must/ be+    -- a valid     -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'     -- value     handleType :: ExternalMemoryHandleTypeFlagBits
src/Vulkan/Extensions/VK_KHR_external_memory_win32.hs view
@@ -115,11 +115,13 @@                         => -- | @device@ is the logical device that created the device memory being                            -- exported.                            ---                           -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                           -- #VUID-vkGetMemoryWin32HandleKHR-device-parameter# @device@ /must/ be a+                           -- valid 'Vulkan.Core10.Handles.Device' handle                            Device                         -> -- | @pGetWin32HandleInfo@ is a pointer to a 'MemoryGetWin32HandleInfoKHR'                            -- structure containing parameters of the export operation.                            --+                           -- #VUID-vkGetMemoryWin32HandleKHR-pGetWin32HandleInfo-parameter#                            -- @pGetWin32HandleInfo@ /must/ be a valid pointer to a valid                            -- 'MemoryGetWin32HandleInfoKHR' structure                            MemoryGetWin32HandleInfoKHR@@ -168,20 +170,23 @@                                    . (MonadIO io)                                   => -- | @device@ is the logical device that will be importing @handle@.                                      ---                                     -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                     -- #VUID-vkGetMemoryWin32HandlePropertiesKHR-device-parameter# @device@+                                     -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                      Device                                   -> -- | @handleType@ is the type of the handle @handle@.                                      ---                                     -- @handleType@ /must/ not be one of the handle types defined as opaque+                                     -- #VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-00666# @handleType@+                                     -- /must/ not be one of the handle types defined as opaque                                      --+                                     -- #VUID-vkGetMemoryWin32HandlePropertiesKHR-handleType-parameter#                                      -- @handleType@ /must/ be a valid                                      -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits'                                      -- value                                      ExternalMemoryHandleTypeFlagBits                                   -> -- | @handle@ is the handle which will be imported.                                      ---                                     -- @handle@ /must/ be an external memory handle created outside of the-                                     -- Vulkan API+                                     -- #VUID-vkGetMemoryWin32HandlePropertiesKHR-handle-00665# @handle@ /must/+                                     -- be an external memory handle created outside of the Vulkan API                                      HANDLE                                   -> io (MemoryWin32HandlePropertiesKHR) getMemoryWin32HandlePropertiesKHR device handleType handle = liftIO . evalContT $ do@@ -222,20 +227,23 @@ -- -- == Valid Usage ----- -   If @handleType@ is not @0@, it /must/ be supported for import, as+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00658# If+--     @handleType@ is not @0@, it /must/ be supported for import, as --     reported by --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalImageFormatProperties' --     or --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.ExternalBufferProperties' ----- -   The memory from which @handle@ was exported, or the memory named by---     @name@ /must/ have been created on the same underlying physical---     device as @device@+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handle-00659# The memory from+--     which @handle@ was exported, or the memory named by @name@ /must/+--     have been created on the same underlying physical device as @device@ ----- -   If @handleType@ is not @0@, it /must/ be defined as an NT handle or---     a global share handle+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00660# If+--     @handleType@ is not @0@, it /must/ be defined as an NT handle or a+--     global share handle ----- -   If @handleType@ is not+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01439# If+--     @handleType@ is not --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT', --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT', --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT',@@ -243,28 +251,34 @@ --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT', --     @name@ /must/ be @NULL@ ----- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/---     name a valid memory resource of the type specified by @handleType@+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handleType-01440# If+--     @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/ name a+--     valid memory resource of the type specified by @handleType@ ----- -   If @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be---     a valid handle of the type specified by @handleType@+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handleType-00661# If+--     @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be a+--     valid handle of the type specified by @handleType@ ----- -   if @handle@ is not @NULL@, @name@ /must/ be @NULL@+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handle-01441# if @handle@ is+--     not @NULL@, @name@ /must/ be @NULL@ ----- -   If @handle@ is not @NULL@, it /must/ obey any requirements listed---     for @handleType@ in+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handle-01518# If @handle@ is+--     not @NULL@, it /must/ obey any requirements listed for @handleType@+--     in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility> ----- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for---     @handleType@ in+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-name-01519# If @name@ is not+--     @NULL@, it /must/ obey any requirements listed for @handleType@ in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-memory-handle-types-compatibility external memory handle types compatibility> -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR' ----- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid+-- -   #VUID-VkImportMemoryWin32HandleInfoKHR-handleType-parameter# If+--     @handleType@ is not @0@, @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits' --     value --@@ -367,7 +381,7 @@ -- -- == Valid Usage ----- -   If+-- -   #VUID-VkExportMemoryWin32HandleInfoKHR-handleTypes-00657# If --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     does not include --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT',@@ -380,11 +394,13 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkExportMemoryWin32HandleInfoKHR-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR' ----- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid---     pointer to a valid+-- -   #VUID-VkExportMemoryWin32HandleInfoKHR-pAttributes-parameter# If+--     @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid pointer+--     to a valid --     'Vulkan.Extensions.VK_NV_external_memory_win32.SECURITY_ATTRIBUTES' --     value --@@ -512,28 +528,32 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ have been included in+-- -   #VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00662# @handleType@+--     /must/ have been included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@ --     when @memory@ was created ----- -   If @handleType@ is defined as an NT handle,---     'getMemoryWin32HandleKHR' /must/ be called no more than once for---     each valid unique combination of @memory@ and @handleType@+-- -   #VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00663# If+--     @handleType@ is defined as an NT handle, 'getMemoryWin32HandleKHR'+--     /must/ be called no more than once for each valid unique combination+--     of @memory@ and @handleType@ ----- -   @handleType@ /must/ be defined as an NT handle or a global share---     handle+-- -   #VUID-VkMemoryGetWin32HandleInfoKHR-handleType-00664# @handleType@+--     /must/ be defined as an NT handle or a global share handle -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMemoryGetWin32HandleInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkMemoryGetWin32HandleInfoKHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle+-- -   #VUID-VkMemoryGetWin32HandleInfoKHR-memory-parameter# @memory@+--     /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkMemoryGetWin32HandleInfoKHR-handleType-parameter#+--     @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlagBits' --     value --
src/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs view
@@ -112,13 +112,14 @@                   => -- | @device@ is the logical device that created the semaphore being                      -- exported.                      ---                     -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                     -- #VUID-vkGetSemaphoreFdKHR-device-parameter# @device@ /must/ be a valid+                     -- 'Vulkan.Core10.Handles.Device' handle                      Device                   -> -- | @pGetFdInfo@ is a pointer to a 'SemaphoreGetFdInfoKHR' structure                      -- containing parameters of the export operation.                      ---                     -- @pGetFdInfo@ /must/ be a valid pointer to a valid-                     -- 'SemaphoreGetFdInfoKHR' structure+                     -- #VUID-vkGetSemaphoreFdKHR-pGetFdInfo-parameter# @pGetFdInfo@ /must/ be a+                     -- valid pointer to a valid 'SemaphoreGetFdInfoKHR' structure                      SemaphoreGetFdInfoKHR                   -> io (("fd" ::: Int32)) getSemaphoreFdKHR device getFdInfo = liftIO . evalContT $ do@@ -173,11 +174,13 @@                       . (MonadIO io)                      => -- | @device@ is the logical device that created the semaphore.                         ---                        -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                        -- #VUID-vkImportSemaphoreFdKHR-device-parameter# @device@ /must/ be a+                        -- valid 'Vulkan.Core10.Handles.Device' handle                         Device                      -> -- | @pImportSemaphoreFdInfo@ is a pointer to a 'ImportSemaphoreFdInfoKHR'                         -- structure specifying the semaphore and import parameters.                         --+                        -- #VUID-vkImportSemaphoreFdKHR-pImportSemaphoreFdInfo-parameter#                         -- @pImportSemaphoreFdInfo@ /must/ be a valid pointer to a valid                         -- 'ImportSemaphoreFdInfoKHR' structure                         ImportSemaphoreFdInfoKHR@@ -211,27 +214,31 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ be a value included in the+-- -   #VUID-VkImportSemaphoreFdInfoKHR-handleType-01143# @handleType@+--     /must/ be a value included in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphore-handletypes-fd Handle Types Supported by > --     table ----- -   @fd@ /must/ obey any requirements listed for @handleType@ in+-- -   #VUID-VkImportSemaphoreFdInfoKHR-fd-01544# @fd@ /must/ obey any+--     requirements listed for @handleType@ in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility> ----- -   If @handleType@ is+-- -   #VUID-VkImportSemaphoreFdInfoKHR-handleType-03263# If @handleType@+--     is --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT', --     the 'Vulkan.Core10.QueueSemaphore.SemaphoreCreateInfo'::@flags@ --     field /must/ match that of the semaphore from which @fd@ was --     exported ----- -   If @handleType@ is+-- -   #VUID-VkImportSemaphoreFdInfoKHR-handleType-03264# If @handleType@+--     is --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT', --     the --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@ --     field /must/ match that of the semaphore from which @fd@ was --     exported ----- -   If @flags@ contains+-- -   #VUID-VkImportSemaphoreFdInfoKHR-flags-03323# If @flags@ contains --     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SEMAPHORE_IMPORT_TEMPORARY_BIT', --     the --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@@@ -259,19 +266,22 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImportSemaphoreFdInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkImportSemaphoreFdInfoKHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'---     handle+-- -   #VUID-VkImportSemaphoreFdInfoKHR-semaphore-parameter# @semaphore@+--     /must/ be a valid 'Vulkan.Core10.Handles.Semaphore' handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkImportSemaphoreFdInfoKHR-flags-parameter# @flags@ /must/ be+--     a valid combination of --     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits' --     values ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkImportSemaphoreFdInfoKHR-handleType-parameter# @handleType@+--     /must/ be a valid --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits' --     value --@@ -361,52 +371,59 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ have been included in+-- -   #VUID-VkSemaphoreGetFdInfoKHR-handleType-01132# @handleType@ /must/+--     have been included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'::@handleTypes@ --     when @semaphore@’s current payload was created ----- -   @semaphore@ /must/ not currently have its payload replaced by an---     imported payload as described below in+-- -   #VUID-VkSemaphoreGetFdInfoKHR-semaphore-01133# @semaphore@ /must/+--     not currently have its payload replaced by an imported payload as+--     described below in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads> --     unless that imported payload’s handle type was included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties'::@exportFromImportedHandleTypes@ --     for @handleType@ ----- -   If @handleType@ refers to a handle type with copy payload---     transference semantics, as defined below in+-- -   #VUID-VkSemaphoreGetFdInfoKHR-handleType-01134# If @handleType@+--     refers to a handle type with copy payload transference semantics, as+--     defined below in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>, --     there /must/ be no queue waiting on @semaphore@ ----- -   If @handleType@ refers to a handle type with copy payload---     transference semantics, @semaphore@ /must/ be signaled, or have an---     associated+-- -   #VUID-VkSemaphoreGetFdInfoKHR-handleType-01135# If @handleType@+--     refers to a handle type with copy payload transference semantics,+--     @semaphore@ /must/ be signaled, or have an associated --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation> --     pending execution ----- -   @handleType@ /must/ be defined as a POSIX file descriptor handle+-- -   #VUID-VkSemaphoreGetFdInfoKHR-handleType-01136# @handleType@ /must/+--     be defined as a POSIX file descriptor handle ----- -   If @handleType@ refers to a handle type with copy payload---     transference semantics, @semaphore@ /must/ have been created with a+-- -   #VUID-VkSemaphoreGetFdInfoKHR-handleType-03253# If @handleType@+--     refers to a handle type with copy payload transference semantics,+--     @semaphore@ /must/ have been created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' ----- -   If @handleType@ refers to a handle type with copy payload---     transference semantics, @semaphore@ /must/ have an associated---     semaphore signal operation that has been submitted for execution and---     any semaphore signal operations on which it depends (if any) /must/---     have also been submitted for execution+-- -   #VUID-VkSemaphoreGetFdInfoKHR-handleType-03254# If @handleType@+--     refers to a handle type with copy payload transference semantics,+--     @semaphore@ /must/ have an associated semaphore signal operation+--     that has been submitted for execution and any semaphore signal+--     operations on which it depends (if any) /must/ have also been+--     submitted for execution -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSemaphoreGetFdInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkSemaphoreGetFdInfoKHR-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'---     handle+-- -   #VUID-VkSemaphoreGetFdInfoKHR-semaphore-parameter# @semaphore@+--     /must/ be a valid 'Vulkan.Core10.Handles.Semaphore' handle ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkSemaphoreGetFdInfoKHR-handleType-parameter# @handleType@+--     /must/ be a valid --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits' --     value --
src/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs view
@@ -121,11 +121,13 @@                            => -- | @device@ is the logical device that created the semaphore being                               -- exported.                               ---                              -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                              -- #VUID-vkGetSemaphoreWin32HandleKHR-device-parameter# @device@ /must/ be+                              -- a valid 'Vulkan.Core10.Handles.Device' handle                               Device                            -> -- | @pGetWin32HandleInfo@ is a pointer to a 'SemaphoreGetWin32HandleInfoKHR'                               -- structure containing parameters of the export operation.                               --+                              -- #VUID-vkGetSemaphoreWin32HandleKHR-pGetWin32HandleInfo-parameter#                               -- @pGetWin32HandleInfo@ /must/ be a valid pointer to a valid                               -- 'SemaphoreGetWin32HandleInfoKHR' structure                               SemaphoreGetWin32HandleInfoKHR@@ -183,12 +185,14 @@                                . (MonadIO io)                               => -- | @device@ is the logical device that created the semaphore.                                  ---                                 -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                 -- #VUID-vkImportSemaphoreWin32HandleKHR-device-parameter# @device@ /must/+                                 -- be a valid 'Vulkan.Core10.Handles.Device' handle                                  Device                               -> -- | @pImportSemaphoreWin32HandleInfo@ is a pointer to a                                  -- 'ImportSemaphoreWin32HandleInfoKHR' structure specifying the semaphore                                  -- and import parameters.                                  --+                                 -- #VUID-vkImportSemaphoreWin32HandleKHR-pImportSemaphoreWin32HandleInfo-parameter#                                  -- @pImportSemaphoreWin32HandleInfo@ /must/ be a valid pointer to a valid                                  -- 'ImportSemaphoreWin32HandleInfoKHR' structure                                  ImportSemaphoreWin32HandleInfoKHR@@ -224,34 +228,42 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ be a value included in the+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01140#+--     @handleType@ /must/ be a value included in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphore-handletypes-win32 Handle Types Supported by > --     table ----- -   If @handleType@ is not+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01466# If+--     @handleType@ is not --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT' --     or --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT', --     @name@ /must/ be @NULL@ ----- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/---     name a valid synchronization primitive of the type specified by+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01467# If+--     @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/ name a+--     valid synchronization primitive of the type specified by --     @handleType@ ----- -   If @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be---     a valid handle of the type specified by @handleType@+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-01468# If+--     @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be a+--     valid handle of the type specified by @handleType@ ----- -   If @handle@ is not @NULL@, @name@ /must/ be @NULL@+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01469# If @handle@+--     is not @NULL@, @name@ /must/ be @NULL@ ----- -   If @handle@ is not @NULL@, it /must/ obey any requirements listed---     for @handleType@ in+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handle-01542# If @handle@+--     is not @NULL@, it /must/ obey any requirements listed for+--     @handleType@ in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility> ----- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for---     @handleType@ in+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-name-01543# If @name@ is+--     not @NULL@, it /must/ obey any requirements listed for @handleType@+--     in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility external semaphore handle types compatibility> ----- -   If @handleType@ is+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03261# If+--     @handleType@ is --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT' --     or --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',@@ -259,7 +271,8 @@ --     field /must/ match that of the semaphore from which @handle@ or --     @name@ was exported ----- -   If @handleType@ is+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-03262# If+--     @handleType@ is --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT' --     or --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT',@@ -268,7 +281,8 @@ --     field /must/ match that of the semaphore from which @handle@ or --     @name@ was exported ----- -   If @flags@ contains+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-03322# If @flags@+--     contains --     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SEMAPHORE_IMPORT_TEMPORARY_BIT', --     the --     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.SemaphoreTypeCreateInfo'::@semaphoreType@@@ -278,19 +292,24 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-pNext-pNext# @pNext@+--     /must/ be @NULL@ ----- -   @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-semaphore-parameter#+--     @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore' --     handle ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-flags-parameter# @flags@+--     /must/ be a valid combination of --     'Vulkan.Core11.Enums.SemaphoreImportFlagBits.SemaphoreImportFlagBits' --     values ----- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid+-- -   #VUID-VkImportSemaphoreWin32HandleInfoKHR-handleType-parameter# If+--     @handleType@ is not @0@, @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits' --     value --@@ -412,7 +431,7 @@ -- -- == Valid Usage ----- -   If+-- -   #VUID-VkExportSemaphoreWin32HandleInfoKHR-handleTypes-01125# If --     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'::@handleTypes@ --     does not include --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT'@@ -423,11 +442,13 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkExportSemaphoreWin32HandleInfoKHR-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR' ----- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid---     pointer to a valid+-- -   #VUID-VkExportSemaphoreWin32HandleInfoKHR-pAttributes-parameter# If+--     @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid pointer+--     to a valid --     'Vulkan.Extensions.VK_NV_external_memory_win32.SECURITY_ATTRIBUTES' --     value --@@ -524,26 +545,30 @@ -- -- == Valid Usage ----- -   @waitSemaphoreValuesCount@ /must/ be the same value as+-- -   #VUID-VkD3D12FenceSubmitInfoKHR-waitSemaphoreValuesCount-00079#+--     @waitSemaphoreValuesCount@ /must/ be the same value as --     'Vulkan.Core10.Queue.SubmitInfo'::@waitSemaphoreCount@, where --     'Vulkan.Core10.Queue.SubmitInfo' is in the @pNext@ chain of this --     'D3D12FenceSubmitInfoKHR' structure ----- -   @signalSemaphoreValuesCount@ /must/ be the same value as+-- -   #VUID-VkD3D12FenceSubmitInfoKHR-signalSemaphoreValuesCount-00080#+--     @signalSemaphoreValuesCount@ /must/ be the same value as --     'Vulkan.Core10.Queue.SubmitInfo'::@signalSemaphoreCount@, where --     'Vulkan.Core10.Queue.SubmitInfo' is in the @pNext@ chain of this --     'D3D12FenceSubmitInfoKHR' structure -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkD3D12FenceSubmitInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR' ----- -   If @waitSemaphoreValuesCount@ is not @0@, and @pWaitSemaphoreValues@---     is not @NULL@, @pWaitSemaphoreValues@ /must/ be a valid pointer to---     an array of @waitSemaphoreValuesCount@ @uint64_t@ values+-- -   #VUID-VkD3D12FenceSubmitInfoKHR-pWaitSemaphoreValues-parameter# If+--     @waitSemaphoreValuesCount@ is not @0@, and @pWaitSemaphoreValues@ is+--     not @NULL@, @pWaitSemaphoreValues@ /must/ be a valid pointer to an+--     array of @waitSemaphoreValuesCount@ @uint64_t@ values ----- -   If @signalSemaphoreValuesCount@ is not @0@, and+-- -   #VUID-VkD3D12FenceSubmitInfoKHR-pSignalSemaphoreValues-parameter# If+--     @signalSemaphoreValuesCount@ is not @0@, and --     @pSignalSemaphoreValues@ is not @NULL@, @pSignalSemaphoreValues@ --     /must/ be a valid pointer to an array of --     @signalSemaphoreValuesCount@ @uint64_t@ values@@ -651,46 +676,55 @@ -- -- == Valid Usage ----- -   @handleType@ /must/ have been included in+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01126#+--     @handleType@ /must/ have been included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore.ExportSemaphoreCreateInfo'::@handleTypes@ --     when the @semaphore@’s current payload was created ----- -   If @handleType@ is defined as an NT handle,+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01127# If+--     @handleType@ is defined as an NT handle, --     'getSemaphoreWin32HandleKHR' /must/ be called no more than once for --     each valid unique combination of @semaphore@ and @handleType@ ----- -   @semaphore@ /must/ not currently have its payload replaced by an---     imported payload as described below in+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-01128# @semaphore@+--     /must/ not currently have its payload replaced by an imported+--     payload as described below in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads> --     unless that imported payload’s handle type was included in --     'Vulkan.Core11.Promoted_From_VK_KHR_external_semaphore_capabilities.ExternalSemaphoreProperties'::@exportFromImportedHandleTypes@ --     for @handleType@ ----- -   If @handleType@ refers to a handle type with copy payload---     transference semantics, as defined below in+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01129# If+--     @handleType@ refers to a handle type with copy payload transference+--     semantics, as defined below in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-importing Importing Semaphore Payloads>, --     there /must/ be no queue waiting on @semaphore@ ----- -   If @handleType@ refers to a handle type with copy payload---     transference semantics, @semaphore@ /must/ be signaled, or have an---     associated+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01130# If+--     @handleType@ refers to a handle type with copy payload transference+--     semantics, @semaphore@ /must/ be signaled, or have an associated --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operation> --     pending execution ----- -   @handleType@ /must/ be defined as an NT handle or a global share+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-01131#+--     @handleType@ /must/ be defined as an NT handle or a global share --     handle -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-pNext-pNext# @pNext@ /must/+--     be @NULL@ ----- -   @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-semaphore-parameter#+--     @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore' --     handle ----- -   @handleType@ /must/ be a valid+-- -   #VUID-VkSemaphoreGetWin32HandleInfoKHR-handleType-parameter#+--     @handleType@ /must/ be a valid --     'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlagBits' --     value --
src/Vulkan/Extensions/VK_KHR_fragment_shading_rate.hs view
@@ -125,64 +125,81 @@ -- -- == Valid Usage ----- -   If+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04507#+--     If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate> --     is not enabled, @pFragmentSize@->@width@ /must/ be @1@ ----- -   If+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04508#+--     If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate> --     is not enabled, @pFragmentSize@->@height@ /must/ be @1@ ----- -   One of+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pipelineFragmentShadingRate-04509#+--     One of --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate>, --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate>, --     or --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate> --     /must/ be enabled ----- -   If the+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-primitiveFragmentShadingRate-04510#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-primitiveFragmentShadingRate primitiveFragmentShadingRate feature> --     is not enabled, @combinerOps@[0] /must/ be --     'FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR' ----- -   If the+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-attachmentFragmentShadingRate-04511#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-attachmentFragmentShadingRate attachmentFragmentShadingRate feature> --     is not enabled, @combinerOps@[1] /must/ be --     'FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR' ----- -   If the+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-fragmentSizeNonTrivialCombinerOps-04512#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentSizeNonTrivialCombinerOps> --     limit is not supported, elements of @combinerOps@ /must/ be either --     'FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR' or --     'FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR' ----- -   @pFragmentSize@->@width@ /must/ be greater than or equal to @1@+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04513#+--     @pFragmentSize@->@width@ /must/ be greater than or equal to @1@ ----- -   @pFragmentSize@->@height@ /must/ be greater than or equal to @1@+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04514#+--     @pFragmentSize@->@height@ /must/ be greater than or equal to @1@ ----- -   @pFragmentSize@->@width@ /must/ be a power-of-two value+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04515#+--     @pFragmentSize@->@width@ /must/ be a power-of-two value ----- -   @pFragmentSize@->@height@ /must/ be a power-of-two value+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04516#+--     @pFragmentSize@->@height@ /must/ be a power-of-two value ----- -   @pFragmentSize@->@width@ /must/ be less than or equal to @4@+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04517#+--     @pFragmentSize@->@width@ /must/ be less than or equal to @4@ ----- -   @pFragmentSize@->@height@ /must/ be less than or equal to @4@+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-04518#+--     @pFragmentSize@->@height@ /must/ be less than or equal to @4@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pFragmentSize@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-pFragmentSize-parameter#+--     @pFragmentSize@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.FundamentalTypes.Extent2D' structure ----- -   Any given element of @combinerOps@ /must/ be a valid+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-combinerOps-parameter# Any+--     given element of @combinerOps@ /must/ be a valid --     'FragmentShadingRateCombinerOpKHR' value ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetFragmentShadingRateKHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -330,13 +347,16 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pFragmentShadingRateCount@ /must/ be a valid pointer to a+-- -   #VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-pFragmentShadingRateCount-parameter#+--     @pFragmentShadingRateCount@ /must/ be a valid pointer to a --     @uint32_t@ value ----- -   If the value referenced by @pFragmentShadingRateCount@ is not @0@,+-- -   #VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-pFragmentShadingRates-parameter#+--     If the value referenced by @pFragmentShadingRateCount@ is not @0@, --     and @pFragmentShadingRates@ is not @NULL@, @pFragmentShadingRates@ --     /must/ be a valid pointer to an array of @pFragmentShadingRateCount@ --     'PhysicalDeviceFragmentShadingRateKHR' structures@@ -410,60 +430,69 @@ -- -- == Valid Usage ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04523#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED' then it /must/ have a --     format whose features contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR' ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04524#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', its @layout@ member --     /must/ be equal to --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' or --     'IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR' ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04525#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @shadingRateAttachmentTexelSize.width@ /must/ be a power of two --     value ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04526#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @shadingRateAttachmentTexelSize.width@ /must/ be less than or equal --     to --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFragmentShadingRateAttachmentTexelSize maxFragmentShadingRateAttachmentTexelSize.width> ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04527#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @shadingRateAttachmentTexelSize.width@ /must/ be greater than or --     equal to --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minFragmentShadingRateAttachmentTexelSize minFragmentShadingRateAttachmentTexelSize.width> ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04528#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @shadingRateAttachmentTexelSize.height@ /must/ be a power of two --     value ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04529#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @shadingRateAttachmentTexelSize.height@ /must/ be less than or equal --     to --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFragmentShadingRateAttachmentTexelSize maxFragmentShadingRateAttachmentTexelSize.height> ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04530#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', --     @shadingRateAttachmentTexelSize.height@ /must/ be greater than or --     equal to --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minFragmentShadingRateAttachmentTexelSize minFragmentShadingRateAttachmentTexelSize.height> ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04531#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the quotient of --     @shadingRateAttachmentTexelSize.width@ and@@ -471,7 +500,8 @@ --     to --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio maxFragmentShadingRateAttachmentTexelSizeAspectRatio> ----- -   If @pFragmentShadingRateAttachment@ is not @NULL@ and its+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-04532#+--     If @pFragmentShadingRateAttachment@ is not @NULL@ and its --     @attachment@ member is not --     'Vulkan.Core10.APIConstants.ATTACHMENT_UNUSED', the quotient of --     @shadingRateAttachmentTexelSize.height@ and@@ -481,10 +511,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR' ----- -   @pFragmentShadingRateAttachment@ /must/ be a valid pointer to a+-- -   #VUID-VkFragmentShadingRateAttachmentInfoKHR-pFragmentShadingRateAttachment-parameter#+--     @pFragmentShadingRateAttachment@ /must/ be a valid pointer to a --     valid --     'Vulkan.Core12.Promoted_From_VK_KHR_create_renderpass2.AttachmentReference2' --     structure@@ -560,10 +592,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineFragmentShadingRateStateCreateInfoKHR-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR' ----- -   Any given element of @combinerOps@ /must/ be a valid+-- -   #VUID-VkPipelineFragmentShadingRateStateCreateInfoKHR-combinerOps-parameter#+--     Any given element of @combinerOps@ /must/ be a valid --     'FragmentShadingRateCombinerOpKHR' value -- -- = See Also@@ -658,16 +692,16 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFragmentShadingRateFeaturesKHR = PhysicalDeviceFragmentShadingRateFeaturesKHR-  { -- | @pipelineFragmentShadingRate@ indicates that the implementation supports-    -- the+  { -- | #features-pipelineFragmentShadingRate# @pipelineFragmentShadingRate@+    -- indicates that the implementation supports the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-pipeline pipeline fragment shading rate>.     pipelineFragmentShadingRate :: Bool-  , -- | @primitiveFragmentShadingRate@ indicates that the implementation-    -- supports the+  , -- | #features-primitiveFragmentShadingRate# @primitiveFragmentShadingRate@+    -- indicates that the implementation supports the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-primitive primitive fragment shading rate>.     primitiveFragmentShadingRate :: Bool-  , -- | @attachmentFragmentShadingRate@ indicates that the implementation-    -- supports the+  , -- | #features-attachmentFragmentShadingRate# @attachmentFragmentShadingRate@+    -- indicates that the implementation supports the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment attachment fragment shading rate>.     attachmentFragmentShadingRate :: Bool   }@@ -759,7 +793,8 @@ -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFragmentShadingRatePropertiesKHR = PhysicalDeviceFragmentShadingRatePropertiesKHR-  { -- | @minFragmentShadingRateAttachmentTexelSize@ indicates minimum supported+  { -- | #limits-minFragmentShadingRateAttachmentTexelSize#+    -- @minFragmentShadingRateAttachmentTexelSize@ indicates minimum supported     -- width and height of the portion of the framebuffer corresponding to each     -- texel in a fragment shading rate attachment. Each value /must/ be less     -- than or equal to the values in@@ -768,7 +803,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>     -- feature is not supported.     minFragmentShadingRateAttachmentTexelSize :: Extent2D-  , -- | @maxFragmentShadingRateAttachmentTexelSize@ indicates maximum supported+  , -- | #limits-maxFragmentShadingRateAttachmentTexelSize#+    -- @maxFragmentShadingRateAttachmentTexelSize@ indicates maximum supported     -- width and height of the portion of the framebuffer corresponding to each     -- texel in a fragment shading rate attachment. Each value /must/ be     -- greater than or equal to the values in@@ -777,7 +813,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>     -- feature is not supported.     maxFragmentShadingRateAttachmentTexelSize :: Extent2D-  , -- | @maxFragmentShadingRateAttachmentTexelSizeAspectRatio@ indicates the+  , -- | #limits-maxFragmentShadingRateAttachmentTexelSizeAspectRatio#+    -- @maxFragmentShadingRateAttachmentTexelSizeAspectRatio@ indicates the     -- maximum ratio between the width and height of the portion of the     -- framebuffer corresponding to each texel in a fragment shading rate     -- attachment. @maxFragmentShadingRateAttachmentTexelSizeAspectRatio@@@ -789,7 +826,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>     -- feature is not supported.     maxFragmentShadingRateAttachmentTexelSizeAspectRatio :: Word32-  , -- | @primitiveFragmentShadingRateWithMultipleViewports@ specifies whether+  , -- | #limits-primitiveFragmentShadingRateWithMultipleViewports#+    -- @primitiveFragmentShadingRateWithMultipleViewports@ specifies whether     -- the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-primitive primitive fragment shading rate>     -- /can/ be used when multiple viewports are used. If this value is@@ -806,10 +844,11 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate>     -- feature is not supported.     primitiveFragmentShadingRateWithMultipleViewports :: Bool-  , -- | @layeredShadingRateAttachments@ specifies whether a shading rate-    -- attachment image view /can/ be created with multiple layers. If this-    -- value is 'Vulkan.Core10.FundamentalTypes.FALSE', when creating an image-    -- view with a @usage@ that includes+  , -- | #limits-layeredShadingRateAttachments# @layeredShadingRateAttachments@+    -- specifies whether a shading rate attachment image view /can/ be created+    -- with multiple layers. If this value is+    -- 'Vulkan.Core10.FundamentalTypes.FALSE', when creating an image view with+    -- a @usage@ that includes     -- 'IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR', @layerCount@     -- /must/ be @1@. It /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE' if     -- the@@ -824,7 +863,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>     -- feature is not supported.     layeredShadingRateAttachments :: Bool-  , -- | @fragmentShadingRateNonTrivialCombinerOps@ specifies whether+  , -- | #limits-fragmentShadingRateNonTrivialCombinerOps#+    -- @fragmentShadingRateNonTrivialCombinerOps@ specifies whether     -- 'FragmentShadingRateCombinerOpKHR' enums other than     -- 'FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR' or     -- 'FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR' /can/ be used. It /must/@@ -834,17 +874,20 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>     -- feature is supported.     fragmentShadingRateNonTrivialCombinerOps :: Bool-  , -- | @maxFragmentSize@ indicates the maximum supported width and height of a-    -- fragment. Its @width@ and @height@ members /must/ both be power-of-two-    -- values. This limit is purely informational, and is not validated.+  , -- | #limits-maxFragmentSize# @maxFragmentSize@ indicates the maximum+    -- supported width and height of a fragment. Its @width@ and @height@+    -- members /must/ both be power-of-two values. This limit is purely+    -- informational, and is not validated.     maxFragmentSize :: Extent2D-  , -- | @maxFragmentSizeAspectRatio@ indicates the maximum ratio between the-    -- width and height of a fragment. @maxFragmentSizeAspectRatio@ /must/ be a-    -- power-of-two value, and /must/ be less than or equal to the maximum of-    -- the @width@ and @height@ members of @maxFragmentSize@. This limit is-    -- purely informational, and is not validated.+  , -- | #limits-maxFragmentSizeAspectRatio# @maxFragmentSizeAspectRatio@+    -- indicates the maximum ratio between the width and height of a fragment.+    -- @maxFragmentSizeAspectRatio@ /must/ be a power-of-two value, and /must/+    -- be less than or equal to the maximum of the @width@ and @height@ members+    -- of @maxFragmentSize@. This limit is purely informational, and is not+    -- validated.     maxFragmentSizeAspectRatio :: Word32-  , -- | @maxFragmentShadingRateCoverageSamples@ specifies the maximum number of+  , -- | #limits-maxFragmentShadingRateCoverageSamples#+    -- @maxFragmentShadingRateCoverageSamples@ specifies the maximum number of     -- coverage samples supported in a single fragment.     -- @maxFragmentShadingRateCoverageSamples@ /must/ be less than or equal to     -- the product of the @width@ and @height@ members of @maxFragmentSize@,@@ -854,30 +897,35 @@     -- @maxSampleMaskWords@ * 32 if @fragmentShadingRateWithShaderSampleMask@     -- is supported. This limit is purely informational, and is not validated.     maxFragmentShadingRateCoverageSamples :: Word32-  , -- | @maxFragmentShadingRateRasterizationSamples@ specifies the maximum+  , -- | #limits-maxFragmentShadingRateRasterizationSamples#+    -- @maxFragmentShadingRateRasterizationSamples@ specifies the maximum     -- sample rate supported when a fragment covers multiple pixels. This limit     -- is purely informational, and is not validated.     maxFragmentShadingRateRasterizationSamples :: SampleCountFlagBits-  , -- | @fragmentShadingRateWithShaderDepthStencilWrites@ specifies whether the+  , -- | #limits-fragmentShadingRateWithShaderDepthStencilWrites#+    -- @fragmentShadingRateWithShaderDepthStencilWrites@ specifies whether the     -- implementation supports writing @FragDepth@ or @FragStencilRefEXT@ from     -- a fragment shader for multi-pixel fragments. If this value is     -- 'Vulkan.Core10.FundamentalTypes.FALSE', writing to those built-ins will     -- clamp the fragment shading rate to (1,1).     fragmentShadingRateWithShaderDepthStencilWrites :: Bool-  , -- | @fragmentShadingRateWithSampleMask@ specifies whether the the+  , -- | #limits-fragmentShadingRateWithSampleMask#+    -- @fragmentShadingRateWithSampleMask@ specifies whether the the     -- implementation supports setting valid bits of     -- 'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::pSampleMask     -- to @0@ for multi-pixel fragments. If this value is     -- 'Vulkan.Core10.FundamentalTypes.FALSE', zeroing valid bits in the sample     -- mask will clamp the fragment shading rate to (1,1).     fragmentShadingRateWithSampleMask :: Bool-  , -- | @fragmentShadingRateWithShaderSampleMask@ specifies whether the+  , -- | #limits-fragmentShadingRateWithShaderSampleMask#+    -- @fragmentShadingRateWithShaderSampleMask@ specifies whether the     -- implementation supports reading or writing     -- 'Vulkan.Core10.FundamentalTypes.SampleMask' for multi-pixel fragments.     -- If this value is 'Vulkan.Core10.FundamentalTypes.FALSE', using that     -- built-in will clamp the fragment shading rate to (1,1).     fragmentShadingRateWithShaderSampleMask :: Bool-  , -- | @fragmentShadingRateWithConservativeRasterization@ specifies whether+  , -- | #limits-fragmentShadingRateWithConservativeRasterization#+    -- @fragmentShadingRateWithConservativeRasterization@ specifies whether     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-conservativeraster conservative rasterization>     -- is supported for multi-pixel fragments. It /must/ be     -- 'Vulkan.Core10.FundamentalTypes.FALSE' if@@ -887,7 +935,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-conservativeraster conservative rasterization>     -- will clamp the fragment shading rate to (1,1).     fragmentShadingRateWithConservativeRasterization :: Bool-  , -- | @fragmentShadingRateWithFragmentShaderInterlock@ specifies whether+  , -- | #limits-fragmentShadingRateWithFragmentShaderInterlock#+    -- @fragmentShadingRateWithFragmentShaderInterlock@ specifies whether     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-shader-interlock fragment shader interlock>     -- is supported for multi-pixel fragments. It /must/ be     -- 'Vulkan.Core10.FundamentalTypes.FALSE' if@@ -897,7 +946,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-shader-interlock fragment shader interlock>     -- will clamp the fragment shading rate to (1,1).     fragmentShadingRateWithFragmentShaderInterlock :: Bool-  , -- | @fragmentShadingRateWithCustomSampleLocations@ specifies whether+  , -- | #limits-fragmentShadingRateWithCustomSampleLocations#+    -- @fragmentShadingRateWithCustomSampleLocations@ specifies whether     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-samplelocations custom sample locations>     -- are supported for multi-pixel fragments. It /must/ be     -- 'Vulkan.Core10.FundamentalTypes.FALSE' if@@ -906,7 +956,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primrast-samplelocations custom sample locations>     -- will clamp the fragment shading rate to (1,1).     fragmentShadingRateWithCustomSampleLocations :: Bool-  , -- | @fragmentShadingRateStrictMultiplyCombiner@ specifies whether+  , -- | #limits-fragmentShadingRateStrictMultiplyCombiner#+    -- @fragmentShadingRateStrictMultiplyCombiner@ specifies whether     -- VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR accurately performs a     -- multiplication or not. Implementations where this value is     -- 'Vulkan.Core10.FundamentalTypes.FALSE' will instead combine rates with@@ -1090,7 +1141,9 @@ -- -- = See Also --+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PipelineFragmentShadingRateEnumStateCreateInfoNV', -- 'PipelineFragmentShadingRateStateCreateInfoKHR',+-- 'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.cmdSetFragmentShadingRateEnumNV', -- 'cmdSetFragmentShadingRateKHR' newtype FragmentShadingRateCombinerOpKHR = FragmentShadingRateCombinerOpKHR Int32   deriving newtype (Eq, Ord, Storable, Zero)
src/Vulkan/Extensions/VK_KHR_get_display_properties2.hs view
@@ -116,12 +116,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceDisplayProperties2KHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceDisplayProperties2KHR-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceDisplayProperties2KHR-pProperties-parameter#+--     If the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'DisplayProperties2KHR' structures --@@ -185,12 +188,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-pProperties-parameter#+--     If the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'DisplayPlaneProperties2KHR' --     structures@@ -254,20 +260,23 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetDisplayModeProperties2KHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @display@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR'---     handle+-- -   #VUID-vkGetDisplayModeProperties2KHR-display-parameter# @display@+--     /must/ be a valid 'Vulkan.Extensions.Handles.DisplayKHR' handle ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetDisplayModeProperties2KHR-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and---     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer---     to an array of @pPropertyCount@ 'DisplayModeProperties2KHR'---     structures+-- -   #VUID-vkGetDisplayModeProperties2KHR-pProperties-parameter# If the+--     value referenced by @pPropertyCount@ is not @0@, and @pProperties@+--     is not @NULL@, @pProperties@ /must/ be a valid pointer to an array+--     of @pPropertyCount@ 'DisplayModeProperties2KHR' structures ----- -   @display@ /must/ have been created, allocated, or retrieved from+-- -   #VUID-vkGetDisplayModeProperties2KHR-display-parent# @display@+--     /must/ have been created, allocated, or retrieved from --     @physicalDevice@ -- -- == Return Codes@@ -352,12 +361,14 @@                                 => -- | @physicalDevice@ is the physical device associated with                                    -- @pDisplayPlaneInfo@.                                    --+                                   -- #VUID-vkGetDisplayPlaneCapabilities2KHR-physicalDevice-parameter#                                    -- @physicalDevice@ /must/ be a valid                                    -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                    PhysicalDevice                                 -> -- | @pDisplayPlaneInfo@ is a pointer to a 'DisplayPlaneInfo2KHR' structure                                    -- describing the plane and mode.                                    --+                                   -- #VUID-vkGetDisplayPlaneCapabilities2KHR-pDisplayPlaneInfo-parameter#                                    -- @pDisplayPlaneInfo@ /must/ be a valid pointer to a valid                                    -- 'DisplayPlaneInfo2KHR' structure                                    DisplayPlaneInfo2KHR@@ -531,13 +542,13 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDisplayPlaneInfo2KHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkDisplayPlaneInfo2KHR-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @mode@ /must/ be a valid 'Vulkan.Extensions.Handles.DisplayModeKHR'---     handle+-- -   #VUID-VkDisplayPlaneInfo2KHR-mode-parameter# @mode@ /must/ be a+--     valid 'Vulkan.Extensions.Handles.DisplayModeKHR' handle -- -- == Host Synchronization --
src/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs view
@@ -116,7 +116,7 @@ -- -- == Valid Usage ----- -   If a+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pNext-02671# If a --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT' --     structure is included in the @pNext@ chain of --     @pSurfaceCapabilities@, a@@ -125,13 +125,16 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceInfo-parameter#+--     @pSurfaceInfo@ /must/ be a valid pointer to a valid --     'PhysicalDeviceSurfaceInfo2KHR' structure ----- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-pSurfaceCapabilities-parameter#+--     @pSurfaceCapabilities@ /must/ be a valid pointer to a --     'SurfaceCapabilities2KHR' structure -- -- == Return Codes@@ -208,23 +211,28 @@ -- -- == Valid Usage ----- -   @pSurfaceInfo->surface@ /must/ be supported by @physicalDevice@, as+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-02740#+--     @pSurfaceInfo->surface@ /must/ be supported by @physicalDevice@, as --     reported by --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR' --     or an equivalent platform-specific mechanism -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceInfo-parameter#+--     @pSurfaceInfo@ /must/ be a valid pointer to a valid --     'PhysicalDeviceSurfaceInfo2KHR' structure ----- -   @pSurfaceFormatCount@ /must/ be a valid pointer to a @uint32_t@+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceFormatCount-parameter#+--     @pSurfaceFormatCount@ /must/ be a valid pointer to a @uint32_t@ --     value ----- -   If the value referenced by @pSurfaceFormatCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-pSurfaceFormats-parameter#+--     If the value referenced by @pSurfaceFormatCount@ is not @0@, and --     @pSurfaceFormats@ is not @NULL@, @pSurfaceFormats@ /must/ be a valid --     pointer to an array of @pSurfaceFormatCount@ 'SurfaceFormat2KHR' --     structures@@ -307,7 +315,8 @@ -- -- == Valid Usage ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-02672# If the @pNext@+--     chain includes a --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT' --     structure with its @fullScreenExclusive@ member set to --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',@@ -318,21 +327,21 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPhysicalDeviceSurfaceInfo2KHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR' ----- -   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+-- -   #VUID-VkPhysicalDeviceSurfaceInfo2KHR-pNext-pNext# 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 --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT' --     or --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkPhysicalDeviceSurfaceInfo2KHR-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'---     handle+-- -   #VUID-VkPhysicalDeviceSurfaceInfo2KHR-surface-parameter# @surface@+--     /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- = See Also --@@ -400,20 +409,20 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSurfaceCapabilities2KHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR' ----- -   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+-- -   #VUID-VkSurfaceCapabilities2KHR-pNext-pNext# 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 --     'Vulkan.Extensions.VK_AMD_display_native_hdr.DisplayNativeHdrSurfaceCapabilitiesAMD', --     'Vulkan.Extensions.VK_KHR_shared_presentable_image.SharedPresentSurfaceCapabilitiesKHR', --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceCapabilitiesFullScreenExclusiveEXT', --     or --     'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkSurfaceCapabilities2KHR-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique -- -- = See Also --
src/Vulkan/Extensions/VK_KHR_incremental_present.hs view
@@ -46,20 +46,23 @@ -- -- == Valid Usage ----- -   @swapchainCount@ /must/ be the same value as+-- -   #VUID-VkPresentRegionsKHR-swapchainCount-01260# @swapchainCount@+--     /must/ be the same value as --     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR'::@swapchainCount@, --     where 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR' is --     included in the @pNext@ chain of this 'PresentRegionsKHR' structure -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPresentRegionsKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_REGIONS_KHR' ----- -   If @pRegions@ is not @NULL@, @pRegions@ /must/ be a valid pointer to---     an array of @swapchainCount@ valid 'PresentRegionKHR' structures+-- -   #VUID-VkPresentRegionsKHR-pRegions-parameter# If @pRegions@ is not+--     @NULL@, @pRegions@ /must/ be a valid pointer to an array of+--     @swapchainCount@ valid 'PresentRegionKHR' structures ----- -   @swapchainCount@ /must/ be greater than @0@+-- -   #VUID-VkPresentRegionsKHR-swapchainCount-arraylength#+--     @swapchainCount@ /must/ be greater than @0@ -- -- = See Also --@@ -130,9 +133,10 @@ -- -- == Valid Usage (Implicit) ----- -   If @rectangleCount@ is not @0@, and @pRectangles@ is not @NULL@,---     @pRectangles@ /must/ be a valid pointer to an array of---     @rectangleCount@ valid 'RectLayerKHR' structures+-- -   #VUID-VkPresentRegionKHR-pRectangles-parameter# If @rectangleCount@+--     is not @0@, and @pRectangles@ is not @NULL@, @pRectangles@ /must/ be+--     a valid pointer to an array of @rectangleCount@ valid 'RectLayerKHR'+--     structures -- -- = See Also --@@ -198,13 +202,14 @@ -- -- == Valid Usage ----- -   The sum of @offset@ and @extent@ /must/ be no greater than the---     @imageExtent@ member of the+-- -   #VUID-VkRectLayerKHR-offset-01261# The sum of @offset@ and @extent@+--     /must/ be no greater than the @imageExtent@ member of the --     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR' --     structure passed to --     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR' ----- -   @layer@ /must/ be less than the @imageArrayLayers@ member of the+-- -   #VUID-VkRectLayerKHR-layer-01262# @layer@ /must/ be less than the+--     @imageArrayLayers@ member of the --     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR' --     structure passed to --     'Vulkan.Extensions.VK_KHR_swapchain.createSwapchainKHR'
src/Vulkan/Extensions/VK_KHR_performance_query.hs view
@@ -179,16 +179,20 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pCounterCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounterCount-parameter#+--     @pCounterCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pCounterCount@ is not @0@, and+-- -   #VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounters-parameter#+--     If the value referenced by @pCounterCount@ is not @0@, and --     @pCounters@ is not @NULL@, @pCounters@ /must/ be a valid pointer to --     an array of @pCounterCount@ 'PerformanceCounterKHR' structures ----- -   If the value referenced by @pCounterCount@ is not @0@, and+-- -   #VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-pCounterDescriptions-parameter#+--     If the value referenced by @pCounterCount@ is not @0@, and --     @pCounterDescriptions@ is not @NULL@, @pCounterDescriptions@ /must/ --     be a valid pointer to an array of @pCounterCount@ --     'PerformanceCounterDescriptionKHR' structures@@ -275,6 +279,7 @@                                                       => -- | @physicalDevice@ is the handle to the physical device whose queue family                                                          -- performance query counter properties will be queried.                                                          --+                                                         -- #VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-physicalDevice-parameter#                                                          -- @physicalDevice@ /must/ be a valid                                                          -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                                          PhysicalDevice@@ -282,6 +287,7 @@                                                          -- 'QueryPoolPerformanceCreateInfoKHR' of the performance query that is to                                                          -- be created.                                                          --+                                                         -- #VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-pPerformanceQueryCreateInfo-parameter#                                                          -- @pPerformanceQueryCreateInfo@ /must/ be a valid pointer to a valid                                                          -- 'QueryPoolPerformanceCreateInfoKHR' structure                                                          ("performanceQueryCreateInfo" ::: QueryPoolPerformanceCreateInfoKHR)@@ -331,13 +337,14 @@                          . (MonadIO io)                         => -- | @device@ is the logical device to profile.                            ---                           -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                           -- #VUID-vkAcquireProfilingLockKHR-device-parameter# @device@ /must/ be a+                           -- valid 'Vulkan.Core10.Handles.Device' handle                            Device                         -> -- | @pInfo@ is a pointer to a 'AcquireProfilingLockInfoKHR' structure which                            -- contains information about how the profiling is to be acquired.                            ---                           -- @pInfo@ /must/ be a valid pointer to a valid-                           -- 'AcquireProfilingLockInfoKHR' structure+                           -- #VUID-vkAcquireProfilingLockKHR-pInfo-parameter# @pInfo@ /must/ be a+                           -- valid pointer to a valid 'AcquireProfilingLockInfoKHR' structure                            AcquireProfilingLockInfoKHR                         -> io () acquireProfilingLockKHR device info = liftIO . evalContT $ do@@ -361,12 +368,14 @@ -- -- == Valid Usage ----- -   The profiling lock of @device@ /must/ have been held via a previous---     successful call to 'acquireProfilingLockKHR'+-- -   #VUID-vkReleaseProfilingLockKHR-device-03235# The profiling lock of+--     @device@ /must/ have been held via a previous successful call to+--     'acquireProfilingLockKHR' -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkReleaseProfilingLockKHR-device-parameter# @device@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Device' handle -- -- = See Also --@@ -415,10 +424,12 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevicePerformanceQueryFeaturesKHR = PhysicalDevicePerformanceQueryFeaturesKHR-  { -- | @performanceCounterQueryPools@ indicates whether the implementation-    -- supports performance counter query pools.+  { -- | #features-performanceCounterQueryPools# @performanceCounterQueryPools@+    -- indicates whether the implementation supports performance counter query+    -- pools.     performanceCounterQueryPools :: Bool-  , -- | @performanceCounterMultipleQueryPools@ indicates whether the+  , -- | #features-performanceCounterMultipleQueryPools#+    -- @performanceCounterMultipleQueryPools@ indicates whether the     -- implementation supports using multiple performance query pools in a     -- primary command buffer and secondary command buffers executed within it.     performanceCounterMultipleQueryPools :: Bool@@ -684,27 +695,33 @@ -- -- == Valid Usage ----- -   @queueFamilyIndex@ /must/ be a valid queue family index of the+-- -   #VUID-VkQueryPoolPerformanceCreateInfoKHR-queueFamilyIndex-03236#+--     @queueFamilyIndex@ /must/ be a valid queue family index of the --     device ----- -   The+-- -   #VUID-VkQueryPoolPerformanceCreateInfoKHR-performanceCounterQueryPools-03237#+--     The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-performanceCounterQueryPools performanceCounterQueryPools> --     feature /must/ be enabled ----- -   Each element of @pCounterIndices@ /must/ be in the range of counters+-- -   #VUID-VkQueryPoolPerformanceCreateInfoKHR-pCounterIndices-03321#+--     Each element of @pCounterIndices@ /must/ be in the range of counters --     reported by --     'enumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR' for --     the queue family specified in @queueFamilyIndex@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkQueryPoolPerformanceCreateInfoKHR-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR' ----- -   @pCounterIndices@ /must/ be a valid pointer to an array of+-- -   #VUID-VkQueryPoolPerformanceCreateInfoKHR-pCounterIndices-parameter#+--     @pCounterIndices@ /must/ be a valid pointer to an array of --     @counterIndexCount@ @uint32_t@ values ----- -   @counterIndexCount@ /must/ be greater than @0@+-- -   #VUID-VkQueryPoolPerformanceCreateInfoKHR-counterIndexCount-arraylength#+--     @counterIndexCount@ /must/ be greater than @0@ -- -- = See Also --@@ -779,7 +796,8 @@ data AcquireProfilingLockInfoKHR = AcquireProfilingLockInfoKHR   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkAcquireProfilingLockInfoKHR-flags-zerobitmask# @flags@ /must/ be+    -- @0@     flags :: AcquireProfilingLockFlagsKHR   , -- | @timeout@ indicates how long the function waits, in nanoseconds, if the     -- profiling lock is not available.@@ -842,6 +860,7 @@ data PerformanceQuerySubmitInfoKHR = PerformanceQuerySubmitInfoKHR   { -- | @counterPassIndex@ specifies which counter pass index is active.     --+    -- #VUID-VkPerformanceQuerySubmitInfoKHR-counterPassIndex-03221#     -- @counterPassIndex@ /must/ be less than the number of counter passes     -- required by any queries within the batch. The required number of counter     -- passes for a performance query is obtained by calling
src/Vulkan/Extensions/VK_KHR_pipeline_executable_properties.hs view
@@ -133,22 +133,28 @@ -- -- == Valid Usage ----- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>+-- -   #VUID-vkGetPipelineExecutablePropertiesKHR-pipelineExecutableInfo-03270#+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo> --     /must/ be enabled ----- -   @pipeline@ member of @pPipelineInfo@ /must/ have been created with+-- -   #VUID-vkGetPipelineExecutablePropertiesKHR-pipeline-03271#+--     @pipeline@ member of @pPipelineInfo@ /must/ have been created with --     @device@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetPipelineExecutablePropertiesKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pPipelineInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetPipelineExecutablePropertiesKHR-pPipelineInfo-parameter#+--     @pPipelineInfo@ /must/ be a valid pointer to a valid --     'PipelineInfoKHR' structure ----- -   @pExecutableCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPipelineExecutablePropertiesKHR-pExecutableCount-parameter#+--     @pExecutableCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pExecutableCount@ is not @0@, and+-- -   #VUID-vkGetPipelineExecutablePropertiesKHR-pProperties-parameter# If+--     the value referenced by @pExecutableCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pExecutableCount@ 'PipelineExecutablePropertiesKHR' --     structures@@ -223,13 +229,16 @@ -- -- == Valid Usage ----- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>+-- -   #VUID-vkGetPipelineExecutableStatisticsKHR-pipelineExecutableInfo-03272#+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo> --     /must/ be enabled ----- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with+-- -   #VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03273#+--     @pipeline@ member of @pExecutableInfo@ /must/ have been created with --     @device@ ----- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with+-- -   #VUID-vkGetPipelineExecutableStatisticsKHR-pipeline-03274#+--     @pipeline@ member of @pExecutableInfo@ /must/ have been created with --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR' --     set in the @flags@ field of --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' or@@ -237,14 +246,18 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetPipelineExecutableStatisticsKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pExecutableInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetPipelineExecutableStatisticsKHR-pExecutableInfo-parameter#+--     @pExecutableInfo@ /must/ be a valid pointer to a valid --     'PipelineExecutableInfoKHR' structure ----- -   @pStatisticCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPipelineExecutableStatisticsKHR-pStatisticCount-parameter#+--     @pStatisticCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pStatisticCount@ is not @0@, and+-- -   #VUID-vkGetPipelineExecutableStatisticsKHR-pStatistics-parameter# If+--     the value referenced by @pStatisticCount@ is not @0@, and --     @pStatistics@ is not @NULL@, @pStatistics@ /must/ be a valid pointer --     to an array of @pStatisticCount@ 'PipelineExecutableStatisticKHR' --     structures@@ -326,13 +339,16 @@ -- -- == Valid Usage ----- -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo>+-- -   #VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipelineExecutableInfo-03276#+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineExecutableInfo pipelineExecutableInfo> --     /must/ be enabled ----- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with+-- -   #VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03277#+--     @pipeline@ member of @pExecutableInfo@ /must/ have been created with --     @device@ ----- -   @pipeline@ member of @pExecutableInfo@ /must/ have been created with+-- -   #VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pipeline-03278#+--     @pipeline@ member of @pExecutableInfo@ /must/ have been created with --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR' --     set in the @flags@ field of --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' or@@ -340,15 +356,19 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetPipelineExecutableInternalRepresentationsKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pExecutableInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pExecutableInfo-parameter#+--     @pExecutableInfo@ /must/ be a valid pointer to a valid --     'PipelineExecutableInfoKHR' structure ----- -   @pInternalRepresentationCount@ /must/ be a valid pointer to a+-- -   #VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pInternalRepresentationCount-parameter#+--     @pInternalRepresentationCount@ /must/ be a valid pointer to a --     @uint32_t@ value ----- -   If the value referenced by @pInternalRepresentationCount@ is not+-- -   #VUID-vkGetPipelineExecutableInternalRepresentationsKHR-pInternalRepresentations-parameter#+--     If the value referenced by @pInternalRepresentationCount@ is not --     @0@, and @pInternalRepresentations@ is not @NULL@, --     @pInternalRepresentations@ /must/ be a valid pointer to an array of --     @pInternalRepresentationCount@@@ -425,9 +445,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = PhysicalDevicePipelineExecutablePropertiesFeaturesKHR-  { -- | @pipelineExecutableInfo@ indicates that the implementation supports-    -- reporting properties and statistics about the executables associated-    -- with a compiled pipeline.+  { -- | #features-pipelineExecutableInfo# @pipelineExecutableInfo@ indicates+    -- that the implementation supports reporting properties and statistics+    -- about the executables associated with a compiled pipeline.     pipelineExecutableInfo :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -479,7 +499,8 @@ data PipelineInfoKHR = PipelineInfoKHR   { -- | @pipeline@ is a 'Vulkan.Core10.Handles.Pipeline' handle.     ---    -- @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+    -- #VUID-VkPipelineInfoKHR-pipeline-parameter# @pipeline@ /must/ be a valid+    -- 'Vulkan.Core10.Handles.Pipeline' handle     pipeline :: Pipeline }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -626,12 +647,14 @@ data PipelineExecutableInfoKHR = PipelineExecutableInfoKHR   { -- | @pipeline@ is the pipeline to query.     ---    -- @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+    -- #VUID-VkPipelineExecutableInfoKHR-pipeline-parameter# @pipeline@ /must/+    -- be a valid 'Vulkan.Core10.Handles.Pipeline' handle     pipeline :: Pipeline   , -- | @executableIndex@ is the index of the executable to query in the array     -- of executable properties returned by     -- 'getPipelineExecutablePropertiesKHR'.     --+    -- #VUID-VkPipelineExecutableInfoKHR-executableIndex-03275#     -- @executableIndex@ /must/ be less than the number of executables     -- associated with @pipeline@ as returned in the @pExecutableCount@     -- parameter of 'getPipelineExecutablePropertiesKHR'
src/Vulkan/Extensions/VK_KHR_pipeline_library.hs view
@@ -38,18 +38,21 @@ -- -- == Valid Usage ----- -   Each element of @pLibraries@ /must/ have been created with+-- -   #VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-03381# Each element+--     of @pLibraries@ /must/ have been created with --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineLibraryCreateInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkPipelineLibraryCreateInfoKHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   If @libraryCount@ is not @0@, @pLibraries@ /must/ be a valid pointer---     to an array of @libraryCount@ valid 'Vulkan.Core10.Handles.Pipeline'+-- -   #VUID-VkPipelineLibraryCreateInfoKHR-pLibraries-parameter# If+--     @libraryCount@ is not @0@, @pLibraries@ /must/ be a valid pointer to+--     an array of @libraryCount@ valid 'Vulkan.Core10.Handles.Pipeline' --     handles -- -- = See Also
src/Vulkan/Extensions/VK_KHR_portability_subset.hs view
@@ -57,57 +57,63 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevicePortabilitySubsetFeaturesKHR = PhysicalDevicePortabilitySubsetFeaturesKHR-  { -- | @constantAlphaColorBlendFactors@ indicates whether this implementation+  { -- | #features-constantAlphaColorBlendFactors#+    -- @constantAlphaColorBlendFactors@ indicates whether this implementation     -- supports constant /alpha/     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blendfactors>     -- used as source or destination /color/     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blending>.     constantAlphaColorBlendFactors :: Bool-  , -- | @events@ indicates whether this implementation supports synchronization-    -- using+  , -- | #features-events# @events@ indicates whether this implementation+    -- supports synchronization using     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-events>.     events :: Bool-  , -- | @imageViewFormatReinterpretation@ indicates whether this implementation+  , -- | #features-imageViewFormatReinterpretation#+    -- @imageViewFormatReinterpretation@ indicates whether this implementation     -- supports a 'Vulkan.Core10.Handles.ImageView' being created with a texel     -- format containing a different number of components, or a different     -- number of bits in each component, than the texel format of the     -- underlying 'Vulkan.Core10.Handles.Image'.     imageViewFormatReinterpretation :: Bool-  , -- | @imageViewFormatSwizzle@ indicates whether this implementation supports-    -- remapping format components using+  , -- | #features-imageViewFormatSwizzle# @imageViewFormatSwizzle@ indicates+    -- whether this implementation supports remapping format components using     -- 'Vulkan.Core10.ImageView.ImageViewCreateInfo'::@components@.     imageViewFormatSwizzle :: Bool-  , -- | @imageView2DOn3DImage@ indicates whether this implementation supports a-    -- 'Vulkan.Core10.Handles.Image' being created with the+  , -- | #features-imageView2DOn3DImage# @imageView2DOn3DImage@ indicates whether+    -- this implementation supports a 'Vulkan.Core10.Handles.Image' being+    -- created with the     -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT'     -- flag set, permitting a 2D or 2D array image view to be created on a 3D     -- 'Vulkan.Core10.Handles.Image'.     imageView2DOn3DImage :: Bool-  , -- | @multisampleArrayImage@ indicates whether this implementation supports a-    -- 'Vulkan.Core10.Handles.Image' being created as a 2D array with multiple-    -- samples per texel.+  , -- | #features-multisampleArrayImage# @multisampleArrayImage@ indicates+    -- whether this implementation supports a 'Vulkan.Core10.Handles.Image'+    -- being created as a 2D array with multiple samples per texel.     multisampleArrayImage :: Bool-  , -- | @mutableComparisonSamplers@ indicates whether this implementation allows-    -- descriptors with comparison samplers to be+  , -- | #features-mutableComparisonSamplers# @mutableComparisonSamplers@+    -- indicates whether this implementation allows descriptors with comparison+    -- samplers to be     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates updated>.     mutableComparisonSamplers :: Bool-  , -- | @pointPolygons@ indicates whether this implementation supports+  , -- | #features-pointPolygons# @pointPolygons@ indicates whether this+    -- implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast>     -- using a /point/     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-polygonmode>.     pointPolygons :: Bool-  , -- | @samplerMipLodBias@ indicates whether this implementation supports-    -- setting a+  , -- | #features-samplerMipLodBias# @samplerMipLodBias@ indicates whether this+    -- implementation supports setting a     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-mipLodBias mipmap LOD bias value>     -- when     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers creating a sampler>.     samplerMipLodBias :: Bool-  , -- | @separateStencilMaskRef@ indicates whether this implementation supports-    -- separate front and back+  , -- | #features-separateStencilMaskRef# @separateStencilMaskRef@ indicates+    -- whether this implementation supports separate front and back     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil>     -- reference values.     separateStencilMaskRef :: Bool-  , -- | @shaderSampleRateInterpolationFunctions@ indicates whether this+  , -- | #features-shaderSampleRateInterpolationFunctions#+    -- @shaderSampleRateInterpolationFunctions@ indicates whether this     -- implementation supports fragment shaders which use the     -- @InterpolationFunction@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-capabilities-table capability>@@ -117,7 +123,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sampleRateShading sampleRateShading>     -- feature is supported.     shaderSampleRateInterpolationFunctions :: Bool-  , -- | @tessellationIsolines@ indicates whether this implementation supports+  , -- | #features-tessellationIsolines# @tessellationIsolines@ indicates whether+    -- this implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation-isoline-tessellation isoline output>     -- from the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>@@ -125,7 +132,8 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>     -- are supported.     tessellationIsolines :: Bool-  , -- | @tessellationPointMode@ indicates whether this implementation supports+  , -- | #features-tessellationPointMode# @tessellationPointMode@ indicates+    -- whether this implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation-point-mode point output>     -- from the     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#tessellation>@@ -133,11 +141,13 @@     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellation shaders>     -- are supported.     tessellationPointMode :: Bool-  , -- | @triangleFans@ indicates whether this implementation supports+  , -- | #features-triangleFans# @triangleFans@ indicates whether this+    -- implementation supports     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-triangle-fans>     -- primitive topology.     triangleFans :: Bool-  , -- | @vertexAttributeAccessBeyondStride@ indicates whether this+  , -- | #features-vertexAttributeAccessBeyondStride#+    -- @vertexAttributeAccessBeyondStride@ indicates whether this     -- implementation supports accessing a vertex input attribute beyond the     -- stride of the corresponding vertex input binding.     vertexAttributeAccessBeyondStride :: Bool@@ -257,7 +267,8 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevicePortabilitySubsetPropertiesKHR = PhysicalDevicePortabilitySubsetPropertiesKHR-  { -- | @minVertexInputBindingStrideAlignment@ indicates the minimum alignment+  { -- | #limits-minVertexInputBindingStrideAlignment#+    -- @minVertexInputBindingStrideAlignment@ indicates the minimum alignment     -- for vertex input strides.     -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@stride@ /must/     -- be a multiple of, and at least as large as, this value.
src/Vulkan/Extensions/VK_KHR_push_descriptor.hs view
@@ -119,42 +119,51 @@ -- -- == Valid Usage ----- -   @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s+-- -   #VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-00363#+--     @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s --     parent 'Vulkan.Core10.Handles.CommandPool'’s queue family ----- -   @set@ /must/ be less than+-- -   #VUID-vkCmdPushDescriptorSetKHR-set-00364# @set@ /must/ be less than --     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@setLayoutCount@ --     provided when @layout@ was created ----- -   @set@ /must/ be the unique set number in the pipeline layout that---     uses a descriptor set layout that was created with+-- -   #VUID-vkCmdPushDescriptorSetKHR-set-00365# @set@ /must/ be the+--     unique set number in the pipeline layout that uses a descriptor set+--     layout that was created with --     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdPushDescriptorSetKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pipelineBindPoint@ /must/ be a valid+-- -   #VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value ----- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'---     handle+-- -   #VUID-vkCmdPushDescriptorSetKHR-layout-parameter# @layout@ /must/ be+--     a valid 'Vulkan.Core10.Handles.PipelineLayout' handle ----- -   @pDescriptorWrites@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCmdPushDescriptorSetKHR-pDescriptorWrites-parameter#+--     @pDescriptorWrites@ /must/ be a valid pointer to an array of --     @descriptorWriteCount@ valid --     'Vulkan.Core10.DescriptorSet.WriteDescriptorSet' structures ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdPushDescriptorSetKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdPushDescriptorSetKHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations ----- -   @descriptorWriteCount@ /must/ be greater than @0@+-- -   #VUID-vkCmdPushDescriptorSetKHR-descriptorWriteCount-arraylength#+--     @descriptorWriteCount@ /must/ be greater than @0@ ----- -   Both of @commandBuffer@, and @layout@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdPushDescriptorSetKHR-commonparent# Both of+--     @commandBuffer@, and @layout@ /must/ have been created, allocated,+--     or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -225,14 +234,14 @@ -- -- == Valid Usage ----- -   The @pipelineBindPoint@ specified during the creation of the---     descriptor update template /must/ be supported by the---     @commandBuffer@’s parent 'Vulkan.Core10.Handles.CommandPool'’s queue---     family+-- -   #VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-00366# The+--     @pipelineBindPoint@ specified during the creation of the descriptor+--     update template /must/ be supported by the @commandBuffer@’s parent+--     'Vulkan.Core10.Handles.CommandPool'’s queue family ----- -   @pData@ /must/ be a valid pointer to a memory containing one or more---     valid instances of---     'Vulkan.Core10.DescriptorSet.DescriptorImageInfo',+-- -   #VUID-vkCmdPushDescriptorSetWithTemplateKHR-pData-01686# @pData@+--     /must/ be a valid pointer to a memory containing one or more valid+--     instances of 'Vulkan.Core10.DescriptorSet.DescriptorImageInfo', --     'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo', or --     'Vulkan.Core10.Handles.BufferView' in a layout defined by --     @descriptorUpdateTemplate@ when it was created with@@ -240,23 +249,29 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @descriptorUpdateTemplate@ /must/ be a valid+-- -   #VUID-vkCmdPushDescriptorSetWithTemplateKHR-descriptorUpdateTemplate-parameter#+--     @descriptorUpdateTemplate@ /must/ be a valid --     'Vulkan.Core11.Handles.DescriptorUpdateTemplate' handle ----- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'+-- -   #VUID-vkCmdPushDescriptorSetWithTemplateKHR-layout-parameter#+--     @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout' --     handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-cmdpool#+--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations ----- -   Each of @commandBuffer@, @descriptorUpdateTemplate@, and @layout@---     /must/ have been created, allocated, or retrieved from the same+-- -   #VUID-vkCmdPushDescriptorSetWithTemplateKHR-commonparent# Each of+--     @commandBuffer@, @descriptorUpdateTemplate@, and @layout@ /must/+--     have been created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization@@ -380,8 +395,8 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDevicePushDescriptorPropertiesKHR = PhysicalDevicePushDescriptorPropertiesKHR-  { -- | @maxPushDescriptors@ is the maximum number of descriptors that /can/ be-    -- used in a descriptor set created with+  { -- | #limits-maxPushDescriptors# @maxPushDescriptors@ is the maximum number+    -- of descriptors that /can/ be used in a descriptor set created with     -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR'     -- set.     maxPushDescriptors :: Word32 }
src/Vulkan/Extensions/VK_KHR_ray_tracing.hs view
@@ -304,5649 +304,6066 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @accelerationStructure@ /must/---     have completed execution------ -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were---     provided when @accelerationStructure@ was created, a compatible set---     of callbacks /must/ be provided here------ -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were---     provided when @accelerationStructure@ was created, @pAllocator@---     /must/ be @NULL@------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   If @accelerationStructure@ is not---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @accelerationStructure@---     /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure------ -   If @accelerationStructure@ is a valid handle, it /must/ have been---     created, allocated, or retrieved from @device@------ == Host Synchronization------ -   Host access to @accelerationStructure@ /must/ be externally---     synchronized------ = See Also------ 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',--- 'Vulkan.Core10.Handles.Device'-destroyAccelerationStructureKHR :: forall io-                                 . (MonadIO io)-                                => -- | @device@ is the logical device that destroys the buffer.-                                   Device-                                -> -- | @accelerationStructure@ is the acceleration structure to destroy.-                                   AccelerationStructureKHR-                                -> -- | @pAllocator@ controls host memory allocation as described in the-                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>-                                   -- chapter.-                                   ("allocator" ::: Maybe AllocationCallbacks)-                                -> io ()-destroyAccelerationStructureKHR device accelerationStructure allocator = liftIO . evalContT $ do-  let vkDestroyAccelerationStructureKHRPtr = pVkDestroyAccelerationStructureKHR (deviceCmds (device :: Device))-  lift $ unless (vkDestroyAccelerationStructureKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyAccelerationStructureKHR is null" Nothing Nothing-  let vkDestroyAccelerationStructureKHR' = mkVkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHRPtr-  pAllocator <- case (allocator) of-    Nothing -> pure nullPtr-    Just j -> ContT $ withCStruct (j)-  lift $ vkDestroyAccelerationStructureKHR' (deviceHandle (device)) (accelerationStructure) pAllocator-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetAccelerationStructureMemoryRequirementsKHR-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoKHR -> Ptr (SomeStruct MemoryRequirements2) -> IO ()) -> Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoKHR -> Ptr (SomeStruct MemoryRequirements2) -> IO ()---- | vkGetAccelerationStructureMemoryRequirementsKHR - Get acceleration--- structure memory requirements------ == Valid Usage (Implicit)------ = See Also------ 'AccelerationStructureMemoryRequirementsInfoKHR',--- 'Vulkan.Core10.Handles.Device',--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'-getAccelerationStructureMemoryRequirementsKHR :: forall a io-                                               . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io)-                                              => -- | @device@ is the logical device on which the acceleration structure was-                                                 -- created.-                                                 ---                                                 -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle-                                                 Device-                                              -> -- | @pInfo@ specifies the acceleration structure to get memory requirements-                                                 -- for.-                                                 ---                                                 -- @pInfo@ /must/ be a valid pointer to a valid-                                                 -- 'AccelerationStructureMemoryRequirementsInfoKHR' structure-                                                 AccelerationStructureMemoryRequirementsInfoKHR-                                              -> io (MemoryRequirements2 a)-getAccelerationStructureMemoryRequirementsKHR device info = liftIO . evalContT $ do-  let vkGetAccelerationStructureMemoryRequirementsKHRPtr = pVkGetAccelerationStructureMemoryRequirementsKHR (deviceCmds (device :: Device))-  lift $ unless (vkGetAccelerationStructureMemoryRequirementsKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureMemoryRequirementsKHR is null" Nothing Nothing-  let vkGetAccelerationStructureMemoryRequirementsKHR' = mkVkGetAccelerationStructureMemoryRequirementsKHR vkGetAccelerationStructureMemoryRequirementsKHRPtr-  pInfo <- ContT $ withCStruct (info)-  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))-  lift $ vkGetAccelerationStructureMemoryRequirementsKHR' (deviceHandle (device)) pInfo (forgetExtensions (pPMemoryRequirements))-  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements-  pure $ (pMemoryRequirements)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkBindAccelerationStructureMemoryKHR-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr BindAccelerationStructureMemoryInfoKHR -> IO Result) -> Ptr Device_T -> Word32 -> Ptr BindAccelerationStructureMemoryInfoKHR -> IO Result---- | vkBindAccelerationStructureMemoryKHR - Bind acceleration structure--- memory------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------ = See Also------ 'BindAccelerationStructureMemoryInfoKHR', 'Vulkan.Core10.Handles.Device'-bindAccelerationStructureMemoryKHR :: forall io-                                    . (MonadIO io)-                                   => -- | @device@ is the logical device that owns the acceleration structures and-                                      -- memory.-                                      ---                                      -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle-                                      Device-                                   -> -- | @pBindInfos@ is a pointer to an array of-                                      -- 'BindAccelerationStructureMemoryInfoKHR' structures describing-                                      -- acceleration structures and memory to bind.-                                      ---                                      -- @pBindInfos@ /must/ be a valid pointer to an array of @bindInfoCount@-                                      -- valid 'BindAccelerationStructureMemoryInfoKHR' structures-                                      ("bindInfos" ::: Vector BindAccelerationStructureMemoryInfoKHR)-                                   -> io ()-bindAccelerationStructureMemoryKHR device bindInfos = liftIO . evalContT $ do-  let vkBindAccelerationStructureMemoryKHRPtr = pVkBindAccelerationStructureMemoryKHR (deviceCmds (device :: Device))-  lift $ unless (vkBindAccelerationStructureMemoryKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBindAccelerationStructureMemoryKHR is null" Nothing Nothing-  let vkBindAccelerationStructureMemoryKHR' = mkVkBindAccelerationStructureMemoryKHR vkBindAccelerationStructureMemoryKHRPtr-  pPBindInfos <- ContT $ allocaBytesAligned @BindAccelerationStructureMemoryInfoKHR ((Data.Vector.length (bindInfos)) * 56) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindInfos `plusPtr` (56 * (i)) :: Ptr BindAccelerationStructureMemoryInfoKHR) (e) . ($ ())) (bindInfos)-  r <- lift $ vkBindAccelerationStructureMemoryKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32)) (pPBindInfos)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyAccelerationStructureKHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct CopyAccelerationStructureInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct CopyAccelerationStructureInfoKHR) -> IO ()---- | vkCmdCopyAccelerationStructureKHR - Copy an acceleration structure------ == Valid Usage------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to device memory------ -   The---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'---     structure /must/ not be included in the @pNext@ chain of the---     'CopyAccelerationStructureInfoKHR' structure------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pInfo@ /must/ be a valid pointer to a valid---     'CopyAccelerationStructureInfoKHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'CopyAccelerationStructureInfoKHR'-cmdCopyAccelerationStructureKHR :: forall a io-                                 . (Extendss CopyAccelerationStructureInfoKHR a, PokeChain a, MonadIO io)-                                => -- | @commandBuffer@ is the command buffer into which the command will be-                                   -- recorded.-                                   CommandBuffer-                                -> -- | @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR' structure-                                   -- defining the copy operation.-                                   (CopyAccelerationStructureInfoKHR a)-                                -> io ()-cmdCopyAccelerationStructureKHR commandBuffer info = liftIO . evalContT $ do-  let vkCmdCopyAccelerationStructureKHRPtr = pVkCmdCopyAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyAccelerationStructureKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyAccelerationStructureKHR is null" Nothing Nothing-  let vkCmdCopyAccelerationStructureKHR' = mkVkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHRPtr-  pInfo <- ContT $ withCStruct (info)-  lift $ vkCmdCopyAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pInfo)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCopyAccelerationStructureKHR-  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct CopyAccelerationStructureInfoKHR) -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct CopyAccelerationStructureInfoKHR) -> IO Result---- | vkCopyAccelerationStructureKHR - Copy an acceleration structure on the--- host------ = Parameters------ This command fulfills the same task as 'cmdCopyAccelerationStructureKHR'--- but executed by the host.------ = Description------ -   @device@ is the device which owns the acceleration structures.------ -   @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR'---     structure defining the copy operation.------ If the--- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'--- structure is included in the @pNext@ chain of the--- 'CopyAccelerationStructureInfoKHR' structure, the operation of this--- command is /deferred/, as defined in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>--- chapter.------ == Valid Usage------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to host-visible memory------ -   the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pInfo@ /must/ be a valid pointer to a valid---     'CopyAccelerationStructureInfoKHR' structure------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'------     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------ = See Also------ 'CopyAccelerationStructureInfoKHR', 'Vulkan.Core10.Handles.Device'-copyAccelerationStructureKHR :: forall a io-                              . (Extendss CopyAccelerationStructureInfoKHR a, PokeChain a, MonadIO io)-                             => -- No documentation found for Nested "vkCopyAccelerationStructureKHR" "device"-                                Device-                             -> -- No documentation found for Nested "vkCopyAccelerationStructureKHR" "pInfo"-                                (CopyAccelerationStructureInfoKHR a)-                             -> io (Result)-copyAccelerationStructureKHR device info = liftIO . evalContT $ do-  let vkCopyAccelerationStructureKHRPtr = pVkCopyAccelerationStructureKHR (deviceCmds (device :: Device))-  lift $ unless (vkCopyAccelerationStructureKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyAccelerationStructureKHR is null" Nothing Nothing-  let vkCopyAccelerationStructureKHR' = mkVkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHRPtr-  pInfo <- ContT $ withCStruct (info)-  r <- lift $ vkCopyAccelerationStructureKHR' (deviceHandle (device)) (forgetExtensions pInfo)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pure $ (r)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyAccelerationStructureToMemoryKHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct CopyAccelerationStructureToMemoryInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct CopyAccelerationStructureToMemoryInfoKHR) -> IO ()---- | vkCmdCopyAccelerationStructureToMemoryKHR - Copy an acceleration--- structure to device memory------ = Parameters------ This command produces the same results as--- 'copyAccelerationStructureToMemoryKHR', but writes its result to a--- device address, and is executed on the device rather than the host. The--- output /may/ not necessarily be bit-for-bit identical, but it can be--- equally used by either 'cmdCopyMemoryToAccelerationStructureKHR' or--- 'copyMemoryToAccelerationStructureKHR'.------ = Description------ -   @commandBuffer@ is the command buffer into which the command will be---     recorded.------ -   @pInfo@ is an a pointer to a---     'CopyAccelerationStructureToMemoryInfoKHR' structure defining the---     copy operation.------ The defined header structure for the serialized data consists of:------ -   'Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data matching---     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@------ -   'Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data identifying the---     compatibility for comparison using---     'getDeviceAccelerationStructureCompatibilityKHR'------ -   A 64-bit integer of the total size matching the value queried using---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'------ -   A 64-bit integer of the deserialized size to be passed in to---     'AccelerationStructureCreateInfoKHR'::@compactedSize@------ -   A 64-bit integer of the count of the number of acceleration---     structure handles following. This will be zero for a bottom-level---     acceleration structure.------ The corresponding handles matching the values returned by--- 'getAccelerationStructureDeviceAddressKHR' or--- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'--- are tightly packed in the buffer following the count. The application is--- expected to store a mapping between those handles and the original--- application-generated bottom-level acceleration structures to provide--- when deserializing.------ == Valid Usage------ -   All 'DeviceOrHostAddressConstKHR' referenced by this command /must/---     contain valid device addresses for a buffer bound to device memory.---     If the buffer is non-sparse then it /must/ be bound completely and---     contiguously to a single VkDeviceMemory object------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to device memory------ -   The---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'---     structure /must/ not be included in the @pNext@ chain of the---     'CopyAccelerationStructureToMemoryInfoKHR' structure------ -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pInfo@ /must/ be a valid pointer to a valid---     'CopyAccelerationStructureToMemoryInfoKHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'CopyAccelerationStructureToMemoryInfoKHR'-cmdCopyAccelerationStructureToMemoryKHR :: forall a io-                                         . (Extendss CopyAccelerationStructureToMemoryInfoKHR a, PokeChain a, MonadIO io)-                                        => -- No documentation found for Nested "vkCmdCopyAccelerationStructureToMemoryKHR" "commandBuffer"-                                           CommandBuffer-                                        -> -- No documentation found for Nested "vkCmdCopyAccelerationStructureToMemoryKHR" "pInfo"-                                           (CopyAccelerationStructureToMemoryInfoKHR a)-                                        -> io ()-cmdCopyAccelerationStructureToMemoryKHR commandBuffer info = liftIO . evalContT $ do-  let vkCmdCopyAccelerationStructureToMemoryKHRPtr = pVkCmdCopyAccelerationStructureToMemoryKHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyAccelerationStructureToMemoryKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyAccelerationStructureToMemoryKHR is null" Nothing Nothing-  let vkCmdCopyAccelerationStructureToMemoryKHR' = mkVkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHRPtr-  pInfo <- ContT $ withCStruct (info)-  lift $ vkCmdCopyAccelerationStructureToMemoryKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pInfo)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCopyAccelerationStructureToMemoryKHR-  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct CopyAccelerationStructureToMemoryInfoKHR) -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct CopyAccelerationStructureToMemoryInfoKHR) -> IO Result---- | vkCopyAccelerationStructureToMemoryKHR - Serialize an acceleration--- structure on the host------ = Parameters------ This command fulfills the same task as--- 'cmdCopyAccelerationStructureToMemoryKHR' but executed by the host.------ = Description------ This command produces the same results as--- 'cmdCopyAccelerationStructureToMemoryKHR', but writes its result--- directly to a host pointer, and is executed on the host rather than the--- device. The output /may/ not necessarily be bit-for-bit identical, but--- it can be equally used by either--- 'cmdCopyMemoryToAccelerationStructureKHR' or--- 'copyMemoryToAccelerationStructureKHR'.------ -   @device@ is the device which owns @pInfo->src@.------ -   @pInfo@ is a pointer to a 'CopyAccelerationStructureToMemoryInfoKHR'---     structure defining the copy operation.------ If the--- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'--- structure is included in the @pNext@ chain of the--- 'CopyAccelerationStructureToMemoryInfoKHR' structure, the operation of--- this command is /deferred/, as defined in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations>--- chapter.------ == Valid Usage------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to host-visible memory------ -   All 'DeviceOrHostAddressKHR' referenced by this command /must/---     contain valid host pointers------ -   the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pInfo@ /must/ be a valid pointer to a valid---     'CopyAccelerationStructureToMemoryInfoKHR' structure------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'------     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------ = See Also------ 'CopyAccelerationStructureToMemoryInfoKHR',--- 'Vulkan.Core10.Handles.Device'-copyAccelerationStructureToMemoryKHR :: forall a io-                                      . (Extendss CopyAccelerationStructureToMemoryInfoKHR a, PokeChain a, MonadIO io)-                                     => -- No documentation found for Nested "vkCopyAccelerationStructureToMemoryKHR" "device"-                                        Device-                                     -> -- No documentation found for Nested "vkCopyAccelerationStructureToMemoryKHR" "pInfo"-                                        (CopyAccelerationStructureToMemoryInfoKHR a)-                                     -> io (Result)-copyAccelerationStructureToMemoryKHR device info = liftIO . evalContT $ do-  let vkCopyAccelerationStructureToMemoryKHRPtr = pVkCopyAccelerationStructureToMemoryKHR (deviceCmds (device :: Device))-  lift $ unless (vkCopyAccelerationStructureToMemoryKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyAccelerationStructureToMemoryKHR is null" Nothing Nothing-  let vkCopyAccelerationStructureToMemoryKHR' = mkVkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHRPtr-  pInfo <- ContT $ withCStruct (info)-  r <- lift $ vkCopyAccelerationStructureToMemoryKHR' (deviceHandle (device)) (forgetExtensions pInfo)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pure $ (r)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdCopyMemoryToAccelerationStructureKHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct CopyMemoryToAccelerationStructureInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct CopyMemoryToAccelerationStructureInfoKHR) -> IO ()---- | vkCmdCopyMemoryToAccelerationStructureKHR - Copy device memory to an--- acceleration structure------ = Parameters------ This command can accept acceleration structures produced by either--- 'cmdCopyAccelerationStructureToMemoryKHR' or--- 'copyAccelerationStructureToMemoryKHR'.------ = Description------ -   @commandBuffer@ is the command buffer into which the command will be---     recorded.------ -   @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'---     structure defining the copy operation.------ The structure provided as input to deserialize is as described in--- 'cmdCopyAccelerationStructureToMemoryKHR', with any acceleration--- structure handles filled in with the newly-queried handles to bottom--- level acceleration structures created before deserialization. These do--- not need to be built at deserialize time, but /must/ be created.------ == Valid Usage------ -   All 'DeviceOrHostAddressKHR' referenced by this command /must/---     contain valid device addresses for a buffer bound to device memory.---     If the buffer is non-sparse then it /must/ be bound completely and---     contiguously to a single VkDeviceMemory object------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to device memory------ -   The---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'---     structure /must/ not be included in the @pNext@ chain of the---     'CopyMemoryToAccelerationStructureInfoKHR' structure------ -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'------ -   The data in @pInfo->src@ /must/ have a format compatible with the---     destination physical device as returned by---     'getDeviceAccelerationStructureCompatibilityKHR'------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pInfo@ /must/ be a valid pointer to a valid---     'CopyMemoryToAccelerationStructureInfoKHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer',--- 'CopyMemoryToAccelerationStructureInfoKHR'-cmdCopyMemoryToAccelerationStructureKHR :: forall a io-                                         . (Extendss CopyMemoryToAccelerationStructureInfoKHR a, PokeChain a, MonadIO io)-                                        => -- No documentation found for Nested "vkCmdCopyMemoryToAccelerationStructureKHR" "commandBuffer"-                                           CommandBuffer-                                        -> -- No documentation found for Nested "vkCmdCopyMemoryToAccelerationStructureKHR" "pInfo"-                                           (CopyMemoryToAccelerationStructureInfoKHR a)-                                        -> io ()-cmdCopyMemoryToAccelerationStructureKHR commandBuffer info = liftIO . evalContT $ do-  let vkCmdCopyMemoryToAccelerationStructureKHRPtr = pVkCmdCopyMemoryToAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdCopyMemoryToAccelerationStructureKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyMemoryToAccelerationStructureKHR is null" Nothing Nothing-  let vkCmdCopyMemoryToAccelerationStructureKHR' = mkVkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHRPtr-  pInfo <- ContT $ withCStruct (info)-  lift $ vkCmdCopyMemoryToAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pInfo)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCopyMemoryToAccelerationStructureKHR-  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct CopyMemoryToAccelerationStructureInfoKHR) -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct CopyMemoryToAccelerationStructureInfoKHR) -> IO Result---- | vkCopyMemoryToAccelerationStructureKHR - Deserialize an acceleration--- structure on the host------ = Parameters------ This command fulfills the same task as--- 'cmdCopyMemoryToAccelerationStructureKHR' but is executed by the host.------ = Description------ This command can accept acceleration structures produced by either--- 'cmdCopyAccelerationStructureToMemoryKHR' or--- 'copyAccelerationStructureToMemoryKHR'.------ -   @device@ is the device which owns @pInfo->dst@.------ -   @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'---     structure defining the copy operation.------ If the--- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'--- structure is included in the @pNext@ chain of the--- 'CopyMemoryToAccelerationStructureInfoKHR' structure, the operation of--- this command is /deferred/, as defined in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>--- chapter.------ == Valid Usage------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to host-visible memory------ -   All 'DeviceOrHostAddressConstKHR' referenced by this command /must/---     contain valid host pointers------ -   the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pInfo@ /must/ be a valid pointer to a valid---     'CopyMemoryToAccelerationStructureInfoKHR' structure------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'------     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------ = See Also------ 'CopyMemoryToAccelerationStructureInfoKHR',--- 'Vulkan.Core10.Handles.Device'-copyMemoryToAccelerationStructureKHR :: forall a io-                                      . (Extendss CopyMemoryToAccelerationStructureInfoKHR a, PokeChain a, MonadIO io)-                                     => -- No documentation found for Nested "vkCopyMemoryToAccelerationStructureKHR" "device"-                                        Device-                                     -> -- No documentation found for Nested "vkCopyMemoryToAccelerationStructureKHR" "pInfo"-                                        (CopyMemoryToAccelerationStructureInfoKHR a)-                                     -> io (Result)-copyMemoryToAccelerationStructureKHR device info = liftIO . evalContT $ do-  let vkCopyMemoryToAccelerationStructureKHRPtr = pVkCopyMemoryToAccelerationStructureKHR (deviceCmds (device :: Device))-  lift $ unless (vkCopyMemoryToAccelerationStructureKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyMemoryToAccelerationStructureKHR is null" Nothing Nothing-  let vkCopyMemoryToAccelerationStructureKHR' = mkVkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHRPtr-  pInfo <- ContT $ withCStruct (info)-  r <- lift $ vkCopyMemoryToAccelerationStructureKHR' (deviceHandle (device)) (forgetExtensions pInfo)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pure $ (r)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdWriteAccelerationStructuresPropertiesKHR-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()---- | vkCmdWriteAccelerationStructuresPropertiesKHR - Write acceleration--- structure result parameters to query results.------ == Valid Usage------ -   @queryPool@ /must/ have been created with a @queryType@ matching---     @queryType@------ -   The queries identified by @queryPool@ and @firstQuery@ /must/ be---     /unavailable/------ -   All acceleration structures in @accelerationStructures@ /must/ have---     been built with---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if---     @queryType@ is---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'------ -   @queryType@ /must/ be---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'---     or---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pAccelerationStructures@ /must/ be a valid pointer to an array of---     @accelerationStructureCount@ valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles------ -   @queryType@ /must/ be a valid---     'Vulkan.Core10.Enums.QueryType.QueryType' value------ -   @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'---     handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   @accelerationStructureCount@ /must/ be greater than @0@------ -   Each of @commandBuffer@, @queryPool@, and the elements of---     @pAccelerationStructures@ /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.Handles.QueryPool',--- 'Vulkan.Core10.Enums.QueryType.QueryType'-cmdWriteAccelerationStructuresPropertiesKHR :: forall io-                                             . (MonadIO io)-                                            => -- | @commandBuffer@ is the command buffer into which the command will be-                                               -- recorded.-                                               CommandBuffer-                                            -> -- | @pAccelerationStructures@ is a pointer to an array of existing-                                               -- previously built acceleration structures.-                                               ("accelerationStructures" ::: Vector AccelerationStructureKHR)-                                            -> -- | @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value-                                               -- specifying the type of queries managed by the pool.-                                               QueryType-                                            -> -- | @queryPool@ is the query pool that will manage the results of the query.-                                               QueryPool-                                            -> -- | @firstQuery@ is the first query index within the query pool that will-                                               -- contain the @accelerationStructureCount@ number of results.-                                               ("firstQuery" ::: Word32)-                                            -> io ()-cmdWriteAccelerationStructuresPropertiesKHR commandBuffer accelerationStructures queryType queryPool firstQuery = liftIO . evalContT $ do-  let vkCmdWriteAccelerationStructuresPropertiesKHRPtr = pVkCmdWriteAccelerationStructuresPropertiesKHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdWriteAccelerationStructuresPropertiesKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteAccelerationStructuresPropertiesKHR is null" Nothing Nothing-  let vkCmdWriteAccelerationStructuresPropertiesKHR' = mkVkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHRPtr-  pPAccelerationStructures <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8-  lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)-  lift $ vkCmdWriteAccelerationStructuresPropertiesKHR' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32)) (pPAccelerationStructures) (queryType) (queryPool) (firstQuery)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkWriteAccelerationStructuresPropertiesKHR-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result) -> Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result---- | vkWriteAccelerationStructuresPropertiesKHR - Query acceleration--- structure meta-data on the host------ = Parameters------ This command fulfills the same task as--- 'cmdWriteAccelerationStructuresPropertiesKHR' but executed by the host.------ = Description------ -   @device@ is the device which owns the acceleration structures in---     @pAccelerationStructures@.------ -   @accelerationStructureCount@ is the count of acceleration structures---     for which to query the property.------ -   @pAccelerationStructures@ points to an array of existing previously---     built acceleration structures.------ -   @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value---     specifying the property to be queried.------ -   @dataSize@ is the size in bytes of the buffer pointed to by @pData@.------ -   @pData@ is a pointer to a user-allocated buffer where the results---     will be written.------ -   @stride@ is the stride in bytes between results for individual---     queries within @pData@.------ == Valid Usage------ -   If @queryType@ is---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',---     then @stride@ /must/ be a multiple of the size of---     'Vulkan.Core10.FundamentalTypes.DeviceSize'------ -   If @queryType@ is---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',---     then @data@ /must/ point to a---     'Vulkan.Core10.FundamentalTypes.DeviceSize'------ -   If @queryType@ is---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',---     then @stride@ /must/ be a multiple of the size of---     'Vulkan.Core10.FundamentalTypes.DeviceSize'------ -   If @queryType@ is---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',---     then @data@ /must/ point to a---     'Vulkan.Core10.FundamentalTypes.DeviceSize'------ -   @dataSize@ /must/ be greater than or equal to---     @accelerationStructureCount@*@stride@------ -   The acceleration structures referenced by @pAccelerationStructures@---     /must/ be bound to host-visible memory------ -   All acceleration structures in @accelerationStructures@ /must/ have---     been built with---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if---     @queryType@ is---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'------ -   @queryType@ /must/ be---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'---     or---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'------ -   the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pAccelerationStructures@ /must/ be a valid pointer to an array of---     @accelerationStructureCount@ valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles------ -   @queryType@ /must/ be a valid---     'Vulkan.Core10.Enums.QueryType.QueryType' value------ -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes------ -   @accelerationStructureCount@ /must/ be greater than @0@------ -   @dataSize@ /must/ be greater than @0@------ -   Each element of @pAccelerationStructures@ /must/ have been created,---     allocated, or retrieved from @device@------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------ = See Also------ 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'Vulkan.Core10.Handles.Device',--- 'Vulkan.Core10.Enums.QueryType.QueryType'-writeAccelerationStructuresPropertiesKHR :: forall io-                                          . (MonadIO io)-                                         => -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "device"-                                            Device-                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "pAccelerationStructures"-                                            ("accelerationStructures" ::: Vector AccelerationStructureKHR)-                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "queryType"-                                            QueryType-                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "dataSize"-                                            ("dataSize" ::: Word64)-                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "pData"-                                            ("data" ::: Ptr ())-                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "stride"-                                            ("stride" ::: Word64)-                                         -> io ()-writeAccelerationStructuresPropertiesKHR device accelerationStructures queryType dataSize data' stride = liftIO . evalContT $ do-  let vkWriteAccelerationStructuresPropertiesKHRPtr = pVkWriteAccelerationStructuresPropertiesKHR (deviceCmds (device :: Device))-  lift $ unless (vkWriteAccelerationStructuresPropertiesKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkWriteAccelerationStructuresPropertiesKHR is null" Nothing Nothing-  let vkWriteAccelerationStructuresPropertiesKHR' = mkVkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHRPtr-  pPAccelerationStructures <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8-  lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)-  r <- lift $ vkWriteAccelerationStructuresPropertiesKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32)) (pPAccelerationStructures) (queryType) (CSize (dataSize)) (data') (CSize (stride))-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdTraceRaysKHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()---- | vkCmdTraceRaysKHR - Initialize a ray tracing dispatch------ = Description------ When the command is executed, a ray generation group of @width@ ×--- @height@ × @depth@ rays is assembled.------ == Valid Usage------ -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or---     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and---     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is---     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of---     this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic---     operations as a result of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering, as specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a---     reduction mode of either---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'---     or---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'---     as a result of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering together with minmax filtering, as---     specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.Image' created with a---     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'---     sampled as a result of this command /must/ only be sampled using a---     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of---     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push---     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to---     create the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   Descriptors in each bound descriptor set, specified via---     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/---     be valid if they are statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command------ -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic------ -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used to sample from any---     'Vulkan.Core10.Handles.Image' with a---     'Vulkan.Core10.Handles.ImageView' of the type---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in---     any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions with---     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions that---     includes a LOD bias or any offset values, in any shader stage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a uniform buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a storage buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects---     created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects---     created with the---     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   Any shader group handle referenced by this call /must/ have been---     queried from the currently bound ray tracing shader pipeline------ -   This command /must/ not cause a shader call instruction to be---     executed from a shader invocation with a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>---     greater than the value of @maxRecursionDepth@ used to create the---     bound ray tracing pipeline------ -   If @pRayGenShaderBindingTable->buffer@ is non-sparse then it /must/---     be bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   The @offset@ member of @pRayGenShaderBindingTable@ /must/ be less---     than the size of the @pRayGenShaderBindingTable->buffer@------ -   @pRayGenShaderBindingTable->offset@ /must/ be a multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@------ -   @pRayGenShaderBindingTable->offset@ +---     @pRayGenShaderBindingTable->size@ /must/ be less than or equal to---     the size of @pRayGenShaderBindingTable->buffer@------ -   The @size@ member of @pRayGenShaderBindingTable@ /must/ be equal to---     its @stride@ member------ -   If @pMissShaderBindingTable->buffer@ is non-sparse then it /must/ be---     bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   The @offset@ member of @pMissShaderBindingTable@ /must/ be less than---     the size of @pMissShaderBindingTable->buffer@------ -   The @offset@ member of @pMissShaderBindingTable@ /must/ be a---     multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@------ -   @pMissShaderBindingTable->offset@ + @pMissShaderBindingTable->size@---     /must/ be less than or equal to the size of---     @pMissShaderBindingTable->buffer@------ -   The @stride@ member of @pMissShaderBindingTable@ /must/ be a---     multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@------ -   The @stride@ member of @pMissShaderBindingTable@ /must/ be less than---     or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@------ -   If @pHitShaderBindingTable->buffer@ is non-sparse then it /must/ be---     bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   The @offset@ member of @pHitShaderBindingTable@ /must/ be less than---     the size of @pHitShaderBindingTable->buffer@------ -   The @offset@ member of @pHitShaderBindingTable@ /must/ be a multiple---     of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@------ -   @pHitShaderBindingTable->offset@ + @pHitShaderBindingTable->size@---     /must/ be less than or equal to the size of---     @pHitShaderBindingTable->buffer@------ -   The @stride@ member of @pHitShaderBindingTable@ /must/ be a multiple---     of 'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@------ -   The @stride@ member of @pHitShaderBindingTable@ /must/ be less than---     or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@------ -   If @pCallableShaderBindingTable->buffer@ is non-sparse then it---     /must/ be bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   The @offset@ member of @pCallableShaderBindingTable@ /must/ be less---     than the size of @pCallableShaderBindingTable->buffer@------ -   The @offset@ member of @pCallableShaderBindingTable@ /must/ be a---     multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@------ -   @pCallableShaderBindingTable->offset@ +---     @pCallableShaderBindingTable->size@ /must/ be less than or equal to---     the size of @pCallableShaderBindingTable->buffer@------ -   The @stride@ member of @pCallableShaderBindingTable@ /must/ be a---     multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@------ -   The @stride@ member of @pCallableShaderBindingTable@ /must/ be less---     than or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',---     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be---     'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',---     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be---     'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',---     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be---     'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR',---     the shader group handle identified by @pMissShaderBindingTable@---     /must/ contain a valid miss shader------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',---     entries in @pHitShaderBindingTable@ accessed as a result of this---     command in order to execute an any hit shader /must/ not be set to---     zero------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',---     entries in @pHitShaderBindingTable@ accessed as a result of this---     command in order to execute a closest hit shader /must/ not be set---     to zero------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',---     entries in @pHitShaderBindingTable@ accessed as a result of this---     command in order to execute an intersection shader /must/ not be set---     to zero------ -   If @commandBuffer@ is a protected command buffer, any resource---     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to---     the pipeline bind point used by this command /must/ not be an---     unprotected resource------ -   If @commandBuffer@ is a protected command buffer, pipeline stages---     other than the framebuffer-space and compute stages in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point /must/ not write to any resource------ -   @width@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]------ -   @height@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]------ -   @depth@ /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid---     'StridedBufferRegionKHR' structure------ -   @pMissShaderBindingTable@ /must/ be a valid pointer to a valid---     'StridedBufferRegionKHR' structure------ -   @pHitShaderBindingTable@ /must/ be a valid pointer to a valid---     'StridedBufferRegionKHR' structure------ -   @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid---     'StridedBufferRegionKHR' structure------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.CommandBuffer', 'StridedBufferRegionKHR'-cmdTraceRaysKHR :: forall io-                 . (MonadIO io)-                => -- | @commandBuffer@ is the command buffer into which the command will be-                   -- recorded.-                   CommandBuffer-                -> -- | @pRaygenShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the-                   -- shader binding table data for the ray generation shader stage.-                   ("raygenShaderBindingTable" ::: StridedBufferRegionKHR)-                -> -- | @pMissShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the-                   -- shader binding table data for the miss shader stage.-                   ("missShaderBindingTable" ::: StridedBufferRegionKHR)-                -> -- | @pHitShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the-                   -- shader binding table data for the hit shader stage.-                   ("hitShaderBindingTable" ::: StridedBufferRegionKHR)-                -> -- | @pCallableShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds-                   -- the shader binding table data for the callable shader stage.-                   ("callableShaderBindingTable" ::: StridedBufferRegionKHR)-                -> -- | @width@ is the width of the ray trace query dimensions.-                   ("width" ::: Word32)-                -> -- | @height@ is height of the ray trace query dimensions.-                   ("height" ::: Word32)-                -> -- | @depth@ is depth of the ray trace query dimensions.-                   ("depth" ::: Word32)-                -> io ()-cmdTraceRaysKHR commandBuffer raygenShaderBindingTable missShaderBindingTable hitShaderBindingTable callableShaderBindingTable width height depth = liftIO . evalContT $ do-  let vkCmdTraceRaysKHRPtr = pVkCmdTraceRaysKHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdTraceRaysKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdTraceRaysKHR is null" Nothing Nothing-  let vkCmdTraceRaysKHR' = mkVkCmdTraceRaysKHR vkCmdTraceRaysKHRPtr-  pRaygenShaderBindingTable <- ContT $ withCStruct (raygenShaderBindingTable)-  pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable)-  pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable)-  pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable)-  lift $ vkCmdTraceRaysKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (width) (height) (depth)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetRayTracingShaderGroupHandlesKHR-  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result---- | vkGetRayTracingShaderGroupHandlesKHR - Query ray tracing pipeline shader--- group handles------ == Valid Usage------ -   @firstGroup@ /must/ be less than the number of shader groups in---     @pipeline@------ -   The sum of @firstGroup@ and @groupCount@ /must/ be less than or---     equal to the number of shader groups in @pipeline@------ -   @dataSize@ /must/ be at least---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@ ×---     @groupCount@------ -   @pipeline@ /must/ have not been created with---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle------ -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes------ -   @dataSize@ /must/ be greater than @0@------ -   @pipeline@ /must/ have been created, allocated, or retrieved from---     @device@------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------ = See Also------ 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'-getRayTracingShaderGroupHandlesKHR :: forall io-                                    . (MonadIO io)-                                   => -- | @device@ is the logical device containing the ray tracing pipeline.-                                      Device-                                   -> -- | @pipeline@ is the ray tracing pipeline object containing the shaders.-                                      Pipeline-                                   -> -- | @firstGroup@ is the index of the first group to retrieve a handle for-                                      -- from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ or-                                      -- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@pGroups@-                                      -- array.-                                      ("firstGroup" ::: Word32)-                                   -> -- | @groupCount@ is the number of shader handles to retrieve.-                                      ("groupCount" ::: Word32)-                                   -> -- | @dataSize@ is the size in bytes of the buffer pointed to by @pData@.-                                      ("dataSize" ::: Word64)-                                   -> -- | @pData@ is a pointer to a user-allocated buffer where the results will-                                      -- be written.-                                      ("data" ::: Ptr ())-                                   -> io ()-getRayTracingShaderGroupHandlesKHR device pipeline firstGroup groupCount dataSize data' = liftIO $ do-  let vkGetRayTracingShaderGroupHandlesKHRPtr = pVkGetRayTracingShaderGroupHandlesKHR (deviceCmds (device :: Device))-  unless (vkGetRayTracingShaderGroupHandlesKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRayTracingShaderGroupHandlesKHR is null" Nothing Nothing-  let vkGetRayTracingShaderGroupHandlesKHR' = mkVkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHRPtr-  r <- vkGetRayTracingShaderGroupHandlesKHR' (deviceHandle (device)) (pipeline) (firstGroup) (groupCount) (CSize (dataSize)) (data')-  when (r < SUCCESS) (throwIO (VulkanException r))---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR-  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result---- | vkGetRayTracingCaptureReplayShaderGroupHandlesKHR - Query ray tracing--- capture replay pipeline shader group handles------ == Valid Usage------ -   @firstGroup@ /must/ be less than the number of shader groups in---     @pipeline@------ -   The sum of @firstGroup@ and @groupCount@ /must/ be less than or---     equal to the number of shader groups in @pipeline@------ -   @dataSize@ /must/ be at least---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleCaptureReplaySize@---     × @groupCount@------ -   'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@---     /must/ be enabled to call this function------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle------ -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes------ -   @dataSize@ /must/ be greater than @0@------ -   @pipeline@ /must/ have been created, allocated, or retrieved from---     @device@------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------ = See Also------ 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'-getRayTracingCaptureReplayShaderGroupHandlesKHR :: forall io-                                                 . (MonadIO io)-                                                => -- | @device@ is the logical device containing the ray tracing pipeline.-                                                   Device-                                                -> -- | @pipeline@ is the ray tracing pipeline object containing the shaders.-                                                   Pipeline-                                                -> -- | @firstGroup@ is the index of the first group to retrieve a handle for-                                                   -- from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ array.-                                                   ("firstGroup" ::: Word32)-                                                -> -- | @groupCount@ is the number of shader handles to retrieve.-                                                   ("groupCount" ::: Word32)-                                                -> -- | @dataSize@ is the size in bytes of the buffer pointed to by @pData@.-                                                   ("dataSize" ::: Word64)-                                                -> -- | @pData@ is a pointer to a user-allocated buffer where the results will-                                                   -- be written.-                                                   ("data" ::: Ptr ())-                                                -> io ()-getRayTracingCaptureReplayShaderGroupHandlesKHR device pipeline firstGroup groupCount dataSize data' = liftIO $ do-  let vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr = pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR (deviceCmds (device :: Device))-  unless (vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRayTracingCaptureReplayShaderGroupHandlesKHR is null" Nothing Nothing-  let vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' = mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr-  r <- vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' (deviceHandle (device)) (pipeline) (firstGroup) (groupCount) (CSize (dataSize)) (data')-  when (r < SUCCESS) (throwIO (VulkanException r))---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCreateRayTracingPipelinesKHR-  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result---- | vkCreateRayTracingPipelinesKHR - Creates a new ray tracing pipeline--- object------ = Description------ The 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'--- error is returned if the implementation is unable to re-use the shader--- group handles provided in--- 'RayTracingShaderGroupCreateInfoKHR'::@pShaderGroupCaptureReplayHandle@--- when--- 'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@--- is enabled.------ == Valid Usage------ -   If the @flags@ member of any element of @pCreateInfos@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and the @basePipelineIndex@ member of that same element is not---     @-1@, @basePipelineIndex@ /must/ be less than the index into---     @pCreateInfos@ that corresponds to that element------ -   If the @flags@ member of any element of @pCreateInfos@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, the base pipeline /must/ have been created with the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'---     flag set------ -   If @pipelineCache@ was created with---     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',---     host access to @pipelineCache@ /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @pipelineCache@ /must/ be a valid---     'Vulkan.Core10.Handles.PipelineCache' handle------ -   @pCreateInfos@ /must/ be a valid pointer to an array of---     @createInfoCount@ valid 'RayTracingPipelineCreateInfoKHR' structures------ -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure------ -   @pPipelines@ /must/ be a valid pointer to an array of---     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles------ -   @createInfoCount@ /must/ be greater than @0@------ -   If @pipelineCache@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'------     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'------     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'------ = See Also------ 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',--- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline',--- 'Vulkan.Core10.Handles.PipelineCache', 'RayTracingPipelineCreateInfoKHR'-createRayTracingPipelinesKHR :: forall io-                              . (MonadIO io)-                             => -- | @device@ is the logical device that creates the ray tracing pipelines.-                                Device-                             -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',-                                -- indicating that pipeline caching is disabled, or the handle of a valid-                                -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>-                                -- object, in which case use of that cache is enabled for the duration of-                                -- the command.-                                PipelineCache-                             -> -- | @pCreateInfos@ is a pointer to an array of-                                -- 'RayTracingPipelineCreateInfoKHR' structures.-                                ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))-                             -> -- | @pAllocator@ controls host memory allocation as described in the-                                -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>-                                -- chapter.-                                ("allocator" ::: Maybe AllocationCallbacks)-                             -> io (Result, ("pipelines" ::: Vector Pipeline))-createRayTracingPipelinesKHR device pipelineCache createInfos allocator = liftIO . evalContT $ do-  let vkCreateRayTracingPipelinesKHRPtr = pVkCreateRayTracingPipelinesKHR (deviceCmds (device :: Device))-  lift $ unless (vkCreateRayTracingPipelinesKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateRayTracingPipelinesKHR is null" Nothing Nothing-  let vkCreateRayTracingPipelinesKHR' = mkVkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHRPtr-  pPCreateInfos <- ContT $ allocaBytesAligned @(RayTracingPipelineCreateInfoKHR _) ((Data.Vector.length (createInfos)) * 120) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (120 * (i)) :: Ptr (RayTracingPipelineCreateInfoKHR _))) (e) . ($ ())) (createInfos)-  pAllocator <- case (allocator) of-    Nothing -> pure nullPtr-    Just j -> ContT $ withCStruct (j)-  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free-  r <- lift $ vkCreateRayTracingPipelinesKHR' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))-  pure $ (r, pPipelines)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdTraceRaysIndirectKHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Buffer -> DeviceSize -> IO ()---- | vkCmdTraceRaysIndirectKHR - Initialize an indirect ray tracing dispatch------ = Description------ 'cmdTraceRaysIndirectKHR' behaves similarly to 'cmdTraceRaysKHR' except--- that the ray trace query dimensions are read by the device from @buffer@--- during execution. The parameters of trace ray are encoded in the--- 'TraceRaysIndirectCommandKHR' structure located at @offset@ bytes in--- @buffer@.------ == Valid Usage------ -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or---     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and---     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is---     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of---     this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic---     operations as a result of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'------ -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command, then the image view’s---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>---     /must/ contain---     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result---     of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering, as specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with---     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a---     reduction mode of either---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'---     or---     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'---     as a result of this command /must/ have a---     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that---     supports cubic filtering together with minmax filtering, as---     specified by---     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@---     returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'------ -   Any 'Vulkan.Core10.Handles.Image' created with a---     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'---     sampled as a result of this command /must/ only be sampled using a---     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of---     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'------ -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push---     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to---     create the current 'Vulkan.Core10.Handles.Pipeline', as described in---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>------ -   Descriptors in each bound descriptor set, specified via---     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/---     be valid if they are statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command------ -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic------ -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the---     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used to sample from any---     'Vulkan.Core10.Handles.Image' with a---     'Vulkan.Core10.Handles.ImageView' of the type---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or---     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in---     any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions with---     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a---     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized---     coordinates, that sampler /must/ not be used with any of the SPIR-V---     @OpImageSample*@ or @OpImageSparseSample*@ instructions that---     includes a LOD bias or any offset values, in any shader stage------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a uniform buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>---     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'---     object bound to the pipeline bind point used by this command---     accesses a storage buffer, it /must/ not access values outside of---     the range of the buffer as specified in the descriptor set bound to---     the same pipeline bind point------ -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource------ -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.ImageView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width---     is accessed as a result of this command, the @SampledType@ of the---     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of---     64.------ -   If a 'Vulkan.Core10.Handles.BufferView' with a---     'Vulkan.Core10.Enums.Format.Format' that has a channel width less---     than 64-bit is accessed as a result of this command, the---     @SampledType@ of the @OpTypeImage@ operand of that instruction---     /must/ have a @Width@ of 32.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects---     created with the---     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>---     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects---     created with the---     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'---     flag /must/ not be accessed by atomic instructions through an---     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this---     command.------ -   Any shader group handle referenced by this call /must/ have been---     queried from the currently bound ray tracing shader pipeline------ -   This command /must/ not cause a shader call instruction to be---     executed from a shader invocation with a---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>---     greater than the value of @maxRecursionDepth@ used to create the---     bound ray tracing pipeline------ -   If @pRayGenShaderBindingTable->buffer@ is non-sparse then it /must/---     be bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   The @offset@ member of @pRayGenShaderBindingTable@ /must/ be less---     than the size of the @pRayGenShaderBindingTable->buffer@------ -   @pRayGenShaderBindingTable->offset@ /must/ be a multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@------ -   @pRayGenShaderBindingTable->offset@ +---     @pRayGenShaderBindingTable->size@ /must/ be less than or equal to---     the size of @pRayGenShaderBindingTable->buffer@------ -   The @size@ member of @pRayGenShaderBindingTable@ /must/ be equal to---     its @stride@ member------ -   If @pMissShaderBindingTable->buffer@ is non-sparse then it /must/ be---     bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   The @offset@ member of @pMissShaderBindingTable@ /must/ be less than---     the size of @pMissShaderBindingTable->buffer@------ -   The @offset@ member of @pMissShaderBindingTable@ /must/ be a---     multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@------ -   @pMissShaderBindingTable->offset@ + @pMissShaderBindingTable->size@---     /must/ be less than or equal to the size of---     @pMissShaderBindingTable->buffer@------ -   The @stride@ member of @pMissShaderBindingTable@ /must/ be a---     multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@------ -   The @stride@ member of @pMissShaderBindingTable@ /must/ be less than---     or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@------ -   If @pHitShaderBindingTable->buffer@ is non-sparse then it /must/ be---     bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   The @offset@ member of @pHitShaderBindingTable@ /must/ be less than---     the size of @pHitShaderBindingTable->buffer@------ -   The @offset@ member of @pHitShaderBindingTable@ /must/ be a multiple---     of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@------ -   @pHitShaderBindingTable->offset@ + @pHitShaderBindingTable->size@---     /must/ be less than or equal to the size of---     @pHitShaderBindingTable->buffer@------ -   The @stride@ member of @pHitShaderBindingTable@ /must/ be a multiple---     of 'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@------ -   The @stride@ member of @pHitShaderBindingTable@ /must/ be less than---     or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@------ -   If @pCallableShaderBindingTable->buffer@ is non-sparse then it---     /must/ be bound completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object------ -   The @offset@ member of @pCallableShaderBindingTable@ /must/ be less---     than the size of @pCallableShaderBindingTable->buffer@------ -   The @offset@ member of @pCallableShaderBindingTable@ /must/ be a---     multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@------ -   @pCallableShaderBindingTable->offset@ +---     @pCallableShaderBindingTable->size@ /must/ be less than or equal to---     the size of @pCallableShaderBindingTable->buffer@------ -   The @stride@ member of @pCallableShaderBindingTable@ /must/ be a---     multiple of---     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@------ -   The @stride@ member of @pCallableShaderBindingTable@ /must/ be less---     than or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',---     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be---     'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',---     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be---     'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',---     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be---     'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR',---     the shader group handle identified by @pMissShaderBindingTable@---     /must/ contain a valid miss shader------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',---     entries in @pHitShaderBindingTable@ accessed as a result of this---     command in order to execute an any hit shader /must/ not be set to---     zero------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',---     entries in @pHitShaderBindingTable@ accessed as a result of this---     command in order to execute a closest hit shader /must/ not be set---     to zero------ -   If the currently bound ray tracing pipeline was created with @flags@---     that included---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',---     entries in @pHitShaderBindingTable@ accessed as a result of this---     command in order to execute an intersection shader /must/ not be set---     to zero------ -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object------ -   @buffer@ /must/ have been created with the---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'---     bit set------ -   @offset@ /must/ be a multiple of @4@------ -   @commandBuffer@ /must/ not be a protected command buffer------ -   (@offset@ + @sizeof@('TraceRaysIndirectCommandKHR')) /must/ be less---     than or equal to the size of @buffer@------ -   the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-indirecttraceray ::rayTracingIndirectTraceRays>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid---     'StridedBufferRegionKHR' structure------ -   @pMissShaderBindingTable@ /must/ be a valid pointer to a valid---     'StridedBufferRegionKHR' structure------ -   @pHitShaderBindingTable@ /must/ be a valid pointer to a valid---     'StridedBufferRegionKHR' structure------ -   @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid---     'StridedBufferRegionKHR' structure------ -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   Both of @buffer@, and @commandBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'StridedBufferRegionKHR'-cmdTraceRaysIndirectKHR :: forall io-                         . (MonadIO io)-                        => -- | @commandBuffer@ is the command buffer into which the command will be-                           -- recorded.-                           CommandBuffer-                        -> -- | @pRaygenShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the-                           -- shader binding table data for the ray generation shader stage.-                           ("raygenShaderBindingTable" ::: StridedBufferRegionKHR)-                        -> -- | @pMissShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the-                           -- shader binding table data for the miss shader stage.-                           ("missShaderBindingTable" ::: StridedBufferRegionKHR)-                        -> -- | @pHitShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the-                           -- shader binding table data for the hit shader stage.-                           ("hitShaderBindingTable" ::: StridedBufferRegionKHR)-                        -> -- | @pCallableShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds-                           -- the shader binding table data for the callable shader stage.-                           ("callableShaderBindingTable" ::: StridedBufferRegionKHR)-                        -> -- | @buffer@ is the buffer containing the trace ray parameters.-                           Buffer-                        -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.-                           ("offset" ::: DeviceSize)-                        -> io ()-cmdTraceRaysIndirectKHR commandBuffer raygenShaderBindingTable missShaderBindingTable hitShaderBindingTable callableShaderBindingTable buffer offset = liftIO . evalContT $ do-  let vkCmdTraceRaysIndirectKHRPtr = pVkCmdTraceRaysIndirectKHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdTraceRaysIndirectKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdTraceRaysIndirectKHR is null" Nothing Nothing-  let vkCmdTraceRaysIndirectKHR' = mkVkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHRPtr-  pRaygenShaderBindingTable <- ContT $ withCStruct (raygenShaderBindingTable)-  pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable)-  pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable)-  pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable)-  lift $ vkCmdTraceRaysIndirectKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (buffer) (offset)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetDeviceAccelerationStructureCompatibilityKHR-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result---- | vkGetDeviceAccelerationStructureCompatibilityKHR - Check if a serialized--- acceleration structure is compatible with the current device------ = Description------ This possible return values for--- 'getDeviceAccelerationStructureCompatibilityKHR' are:------ -   'Vulkan.Core10.Enums.Result.SUCCESS' is returned if an acceleration---     structure serialized with @version@ as the version information is---     compatible with @device@.------ -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_VERSION_KHR' is---     returned if an acceleration structure serialized with @version@ as---     the version information is not compatible with @device@.------ == Valid Usage------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>---     or---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @version@ /must/ be a valid pointer to a valid---     'AccelerationStructureVersionKHR' structure------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_VERSION_KHR'------ = See Also------ 'AccelerationStructureVersionKHR', 'Vulkan.Core10.Handles.Device'-getDeviceAccelerationStructureCompatibilityKHR :: forall io-                                                . (MonadIO io)-                                               => -- | @device@ is the device to check the version against.-                                                  Device-                                               -> -- | @version@ points to the 'AccelerationStructureVersionKHR' version-                                                  -- information to check against the device.-                                                  AccelerationStructureVersionKHR-                                               -> io ()-getDeviceAccelerationStructureCompatibilityKHR device version = liftIO . evalContT $ do-  let vkGetDeviceAccelerationStructureCompatibilityKHRPtr = pVkGetDeviceAccelerationStructureCompatibilityKHR (deviceCmds (device :: Device))-  lift $ unless (vkGetDeviceAccelerationStructureCompatibilityKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceAccelerationStructureCompatibilityKHR is null" Nothing Nothing-  let vkGetDeviceAccelerationStructureCompatibilityKHR' = mkVkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHRPtr-  version' <- ContT $ withCStruct (version)-  r <- lift $ vkGetDeviceAccelerationStructureCompatibilityKHR' (deviceHandle (device)) version'-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCreateAccelerationStructureKHR-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result---- | vkCreateAccelerationStructureKHR - Create a new acceleration structure--- object------ = Description------ Similar to other objects in Vulkan, the acceleration structure creation--- merely creates an object with a specific “shape”. The type and quantity--- of geometry that can be built into an acceleration structure is--- determined by the parameters of 'AccelerationStructureCreateInfoKHR'.------ Populating the data in the object after allocating and binding memory is--- done with commands such as 'cmdBuildAccelerationStructureKHR',--- 'buildAccelerationStructureKHR', 'cmdCopyAccelerationStructureKHR', and--- 'copyAccelerationStructureKHR'.------ The input buffers passed to acceleration structure build commands will--- be referenced by the implementation for the duration of the command.--- After the command completes, the acceleration structure /may/ hold a--- reference to any acceleration structure specified by an active instance--- contained therein. Apart from this referencing, acceleration structures--- /must/ be fully self-contained. The application /may/ re-use or free any--- memory which was used by the command as an input or as scratch without--- affecting the results of ray traversal.------ == Valid Usage------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>---     or---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>---     feature /must/ be enabled------ -   If 'AccelerationStructureCreateInfoKHR'::@deviceAddress@ is not---     zero, the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-ascapturereplay rayTracingAccelerationStructureCaptureReplay>---     feature /must/ be enabled------ -   If @device@ was created with multiple physical devices, then the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'AccelerationStructureCreateInfoKHR' structure------ -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure------ -   @pAccelerationStructure@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'------ = See Also------ 'AccelerationStructureCreateInfoKHR',--- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',--- 'Vulkan.Core10.Handles.Device'-createAccelerationStructureKHR :: forall io-                                . (MonadIO io)-                               => -- | @device@ is the logical device that creates the buffer object.-                                  Device-                               -> -- | @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoKHR'-                                  -- structure containing parameters affecting creation of the acceleration-                                  -- structure.-                                  AccelerationStructureCreateInfoKHR-                               -> -- | @pAllocator@ controls host memory allocation as described in the-                                  -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>-                                  -- chapter.-                                  ("allocator" ::: Maybe AllocationCallbacks)-                               -> io (AccelerationStructureKHR)-createAccelerationStructureKHR device createInfo allocator = liftIO . evalContT $ do-  let vkCreateAccelerationStructureKHRPtr = pVkCreateAccelerationStructureKHR (deviceCmds (device :: Device))-  lift $ unless (vkCreateAccelerationStructureKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateAccelerationStructureKHR is null" Nothing Nothing-  let vkCreateAccelerationStructureKHR' = mkVkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHRPtr-  pCreateInfo <- ContT $ withCStruct (createInfo)-  pAllocator <- case (allocator) of-    Nothing -> pure nullPtr-    Just j -> ContT $ withCStruct (j)-  pPAccelerationStructure <- ContT $ bracket (callocBytes @AccelerationStructureKHR 8) free-  r <- lift $ vkCreateAccelerationStructureKHR' (deviceHandle (device)) pCreateInfo pAllocator (pPAccelerationStructure)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pAccelerationStructure <- lift $ peek @AccelerationStructureKHR pPAccelerationStructure-  pure $ (pAccelerationStructure)---- | A convenience wrapper to make a compatible pair of calls to--- 'createAccelerationStructureKHR' and 'destroyAccelerationStructureKHR'------ To ensure that 'destroyAccelerationStructureKHR' is always called: pass--- 'Control.Exception.bracket' (or the allocate function from your--- favourite resource management library) as the first argument.--- To just extract the pair pass '(,)' as the first argument.----withAccelerationStructureKHR :: forall io r . MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> Maybe AllocationCallbacks -> (io (AccelerationStructureKHR) -> ((AccelerationStructureKHR) -> io ()) -> r) -> r-withAccelerationStructureKHR device pCreateInfo pAllocator b =-  b (createAccelerationStructureKHR device pCreateInfo pAllocator)-    (\(o0) -> destroyAccelerationStructureKHR device o0 pAllocator)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBuildAccelerationStructureKHR-  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO ()---- | vkCmdBuildAccelerationStructureKHR - Build an acceleration structure------ = Description------ The 'cmdBuildAccelerationStructureKHR' command provides the ability to--- initiate multiple acceleration structures builds, however there is no--- ordering or synchronization implied between any of the individual--- acceleration structure builds.------ Note------ This means that an application /cannot/ build a top-level acceleration--- structure in the same 'cmdBuildAccelerationStructureKHR' call as the--- associated bottom-level or instance acceleration structures are being--- built. There also /cannot/ be any memory aliasing between any--- acceleration structure memories or scratch memories being used by any of--- the builds.------ Accesses to the acceleration structure scratch buffers as identified by--- the 'AccelerationStructureBuildGeometryInfoKHR'→@scratchData@ buffer--- device addresses /must/ be--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>--- with the--- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>--- and an--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>--- of--- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'--- or--- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'.------ == Valid Usage------ -   Each element of @ppOffsetInfos@[i] /must/ be a valid pointer to an---     array of @pInfos@[i].@geometryCount@---     'AccelerationStructureBuildOffsetInfoKHR' structures------ -   Each @pInfos@[i].@srcAccelerationStructure@ /must/ not refer to the---     same acceleration structure as any---     @pInfos@[i].@dstAccelerationStructure@ that is provided to the same---     build command unless it is identical for an update------ -   For each @pInfos@[i], @dstAccelerationStructure@ /must/ have been---     created with compatible 'AccelerationStructureCreateInfoKHR' where---     'AccelerationStructureCreateInfoKHR'::@type@ and---     'AccelerationStructureCreateInfoKHR'::@flags@ are identical to---     'AccelerationStructureBuildGeometryInfoKHR'::@type@ and---     'AccelerationStructureBuildGeometryInfoKHR'::@flags@ respectively,---     'AccelerationStructureBuildGeometryInfoKHR'::@geometryCount@ for---     @dstAccelerationStructure@ are greater than or equal to the build---     size, and each geometry in---     'AccelerationStructureBuildGeometryInfoKHR'::@ppGeometries@ for---     @dstAccelerationStructure@ has greater than or equal to the number---     of vertices, indices, and AABBs,---     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ is---     both 0 or both non-zero, and all other parameters are the same------ -   For each @pInfos@[i], if @update@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', then objects that were---     previously active for that acceleration structure /must/ not be made---     inactive as per---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>------ -   For each @pInfos@[i], if @update@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', then objects that were---     previously inactive for that acceleration structure /must/ not be---     made active as per---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>------ -   Any acceleration structure instance in any top level build in this---     command /must/ not reference any bottom level acceleration structure---     built by this command------ -   There /must/ not be any---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>---     between the scratch memories that are provided in all the---     @pInfos@[i].@scratchData@ memories for the acceleration structure---     builds------ -   There /must/ not be any---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>---     between memory bound to any top level, bottom level, or instance---     acceleration structure accessed by this command------ -   If @update@ is 'Vulkan.Core10.FundamentalTypes.FALSE', all addresses---     between @pInfos@[i].@scratchData@ and @pInfos@[i].@scratchData@ + N---     - 1 /must/ be in the buffer device address range of the same buffer,---     where N is given by the @size@ member of the---     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure---     returned from a call to---     'getAccelerationStructureMemoryRequirementsKHR' with---     'AccelerationStructureMemoryRequirementsInfoKHR'::@accelerationStructure@---     set to @pInfos@[i].@dstAccelerationStructure@ and---     'AccelerationStructureMemoryRequirementsInfoKHR'::@type@ set to---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR'------ -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', all addresses---     between @pInfos@[i].@scratchData@ and @pInfos@[i].@scratchData@ + N---     - 1 /must/ be in the buffer device address range of the same buffer,---     where N is given by the @size@ member of the---     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure---     returned from a call to---     'getAccelerationStructureMemoryRequirementsKHR' with---     'AccelerationStructureMemoryRequirementsInfoKHR'::@accelerationStructure@---     set to @pInfos@[i].@dstAccelerationStructure@ and---     'AccelerationStructureMemoryRequirementsInfoKHR'::@type@ set to---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR'------ -   The buffer from which the buffer device address---     @pInfos@[i].@scratchData@ is queried /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_RAY_TRACING_BIT_KHR'---     usage flag------ -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'---     referenced by this command /must/ contain valid device addresses for---     a buffer bound to device memory. If the buffer is non-sparse then it---     /must/ be bound completely and contiguously to a single---     VkDeviceMemory object------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to device memory------ -   The---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'---     structure /must/ not be included in the @pNext@ chain of any of the---     provided 'AccelerationStructureBuildGeometryInfoKHR' structures------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pInfos@ /must/ be a valid pointer to an array of @infoCount@ valid---     'AccelerationStructureBuildGeometryInfoKHR' structures------ -   @ppOffsetInfos@ /must/ be a valid pointer to an array of @infoCount@---     'AccelerationStructureBuildOffsetInfoKHR' structures------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   @infoCount@ /must/ be greater than @0@------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'AccelerationStructureBuildGeometryInfoKHR',--- 'AccelerationStructureBuildOffsetInfoKHR',--- 'Vulkan.Core10.Handles.CommandBuffer'-cmdBuildAccelerationStructureKHR :: forall io-                                  . (MonadIO io)-                                 => -- | @commandBuffer@ is the command buffer into which the command will be-                                    -- recorded.-                                    CommandBuffer-                                 -> -- | @pInfos@ is an array of @infoCount@-                                    -- 'AccelerationStructureBuildGeometryInfoKHR' structures defining the-                                    -- geometry used to build each acceleration structure.-                                    ("infos" ::: Vector (SomeStruct AccelerationStructureBuildGeometryInfoKHR))-                                 -> -- | @ppOffsetInfos@ is an array of @infoCount@ pointers to arrays of-                                    -- 'AccelerationStructureBuildOffsetInfoKHR' structures. Each-                                    -- @ppOffsetInfos@[i] is an array of @pInfos@[i].@geometryCount@-                                    -- 'AccelerationStructureBuildOffsetInfoKHR' structures defining dynamic-                                    -- offsets to the addresses where geometry data is stored, as defined by-                                    -- @pInfos@[i].-                                    ("offsetInfos" ::: Vector AccelerationStructureBuildOffsetInfoKHR)-                                 -> io ()-cmdBuildAccelerationStructureKHR commandBuffer infos offsetInfos = liftIO . evalContT $ do-  let vkCmdBuildAccelerationStructureKHRPtr = pVkCmdBuildAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdBuildAccelerationStructureKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBuildAccelerationStructureKHR is null" Nothing Nothing-  let vkCmdBuildAccelerationStructureKHR' = mkVkCmdBuildAccelerationStructureKHR vkCmdBuildAccelerationStructureKHRPtr-  let pInfosLength = Data.Vector.length $ (infos)-  lift $ unless ((Data.Vector.length $ (offsetInfos)) == pInfosLength) $-    throwIO $ IOError Nothing InvalidArgument "" "ppOffsetInfos and pInfos must have the same length" Nothing Nothing-  pPInfos <- ContT $ allocaBytesAligned @(AccelerationStructureBuildGeometryInfoKHR _) ((Data.Vector.length (infos)) * 72) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInfos `plusPtr` (72 * (i)) :: Ptr (AccelerationStructureBuildGeometryInfoKHR _))) (e) . ($ ())) (infos)-  pPpOffsetInfos <- ContT $ allocaBytesAligned @(Ptr AccelerationStructureBuildOffsetInfoKHR) ((Data.Vector.length (offsetInfos)) * 8) 8-  Data.Vector.imapM_ (\i e -> do-    ppOffsetInfos <- ContT $ withCStruct (e)-    lift $ poke (pPpOffsetInfos `plusPtr` (8 * (i)) :: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) ppOffsetInfos) (offsetInfos)-  lift $ vkCmdBuildAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) ((fromIntegral pInfosLength :: Word32)) (forgetExtensions (pPInfos)) (pPpOffsetInfos)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkCmdBuildAccelerationStructureIndirectKHR-  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Buffer -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Buffer -> DeviceSize -> Word32 -> IO ()---- | vkCmdBuildAccelerationStructureIndirectKHR - Build an acceleration--- structure with some parameters provided on the device------ == Valid Usage------ -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'---     referenced by this command /must/ contain valid device addresses for---     a buffer bound to device memory. If the buffer is non-sparse then it---     /must/ be bound completely and contiguously to a single---     VkDeviceMemory object------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to device memory------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-indirectasbuild ::rayTracingIndirectAccelerationStructureBuild>---     feature /must/ be enabled------ -   The---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'---     structure /must/ not be included in the @pNext@ chain of any of the---     provided 'AccelerationStructureBuildGeometryInfoKHR' structures------ == Valid Usage (Implicit)------ -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle------ -   @pInfo@ /must/ be a valid pointer to a valid---     'AccelerationStructureBuildGeometryInfoKHR' structure------ -   @indirectBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'---     handle------ -   @commandBuffer@ /must/ be in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>------ -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was---     allocated from /must/ support compute operations------ -   This command /must/ only be called outside of a render pass instance------ -   Both of @commandBuffer@, and @indirectBuffer@ /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ == Host Synchronization------ -   Host access to @commandBuffer@ /must/ be externally synchronized------ -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that---     @commandBuffer@ was allocated from /must/ be externally synchronized------ == Command Properties------ \'------ +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+--- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |--- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+--- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |--- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |--- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+------ = See Also------ 'AccelerationStructureBuildGeometryInfoKHR',--- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize'-cmdBuildAccelerationStructureIndirectKHR :: forall a io-                                          . (Extendss AccelerationStructureBuildGeometryInfoKHR a, PokeChain a, MonadIO io)-                                         => -- | @commandBuffer@ is the command buffer into which the command will be-                                            -- recorded.-                                            CommandBuffer-                                         -> -- | @pInfo@ is a pointer to a 'AccelerationStructureBuildGeometryInfoKHR'-                                            -- structure defining the geometry used to build the acceleration-                                            -- structure.-                                            (AccelerationStructureBuildGeometryInfoKHR a)-                                         -> -- | @indirectBuffer@ is the 'Vulkan.Core10.Handles.Buffer' containing-                                            -- @pInfo->geometryCount@ 'AccelerationStructureBuildOffsetInfoKHR'-                                            -- structures defining dynamic offsets to the addresses where geometry data-                                            -- is stored, as defined by @pInfo@.-                                            ("indirectBuffer" ::: Buffer)-                                         -> -- | @indirectOffset@ is the byte offset into @indirectBuffer@ where offset-                                            -- parameters begin.-                                            ("indirectOffset" ::: DeviceSize)-                                         -> -- No documentation found for Nested "vkCmdBuildAccelerationStructureIndirectKHR" "indirectStride"-                                            ("indirectStride" ::: Word32)-                                         -> io ()-cmdBuildAccelerationStructureIndirectKHR commandBuffer info indirectBuffer indirectOffset indirectStride = liftIO . evalContT $ do-  let vkCmdBuildAccelerationStructureIndirectKHRPtr = pVkCmdBuildAccelerationStructureIndirectKHR (deviceCmds (commandBuffer :: CommandBuffer))-  lift $ unless (vkCmdBuildAccelerationStructureIndirectKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBuildAccelerationStructureIndirectKHR is null" Nothing Nothing-  let vkCmdBuildAccelerationStructureIndirectKHR' = mkVkCmdBuildAccelerationStructureIndirectKHR vkCmdBuildAccelerationStructureIndirectKHRPtr-  pInfo <- ContT $ withCStruct (info)-  lift $ vkCmdBuildAccelerationStructureIndirectKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pInfo) (indirectBuffer) (indirectOffset) (indirectStride)-  pure $ ()---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkBuildAccelerationStructureKHR-  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO Result---- | vkBuildAccelerationStructureKHR - Build an acceleration structure on the--- host------ = Parameters------ This command fulfills the same task as--- 'cmdBuildAccelerationStructureKHR' but executed by the host.------ = Description------ -   @device@ is the 'Vulkan.Core10.Handles.Device' for which the---     acceleration structures are being built.------ -   @infoCount@ is the number of acceleration structures to build. It---     specifies the number of the @pInfos@ structures and @ppOffsetInfos@---     pointers that /must/ be provided.------ -   @pInfos@ is a pointer to an array of @infoCount@---     'AccelerationStructureBuildGeometryInfoKHR' structures defining the---     geometry used to build each acceleration structure.------ -   @ppOffsetInfos@ is an array of @infoCount@ pointers to arrays of---     'AccelerationStructureBuildOffsetInfoKHR' structures. Each---     @ppOffsetInfos@[i] is an array of @pInfos@[i].@geometryCount@---     'AccelerationStructureBuildOffsetInfoKHR' structures defining---     dynamic offsets to the addresses where geometry data is stored, as---     defined by @pInfos@[i].------ The 'buildAccelerationStructureKHR' command provides the ability to--- initiate multiple acceleration structures builds, however there is no--- ordering or synchronization implied between any of the individual--- acceleration structure builds.------ Note------ This means that an application /cannot/ build a top-level acceleration--- structure in the same 'buildAccelerationStructureKHR' call as the--- associated bottom-level or instance acceleration structures are being--- built. There also /cannot/ be any memory aliasing between any--- acceleration structure memories or scratch memories being used by any of--- the builds.------ If the--- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'--- structure is included in the @pNext@ chain of any--- 'AccelerationStructureBuildGeometryInfoKHR' structure, the operation of--- this command is /deferred/, as defined in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>--- chapter.------ == Valid Usage------ -   Each element of @ppOffsetInfos@[i] /must/ be a valid pointer to an---     array of @pInfos@[i].@geometryCount@---     'AccelerationStructureBuildOffsetInfoKHR' structures------ -   Each @pInfos@[i].@srcAccelerationStructure@ /must/ not refer to the---     same acceleration structure as any---     @pInfos@[i].@dstAccelerationStructure@ that is provided to the same---     build command unless it is identical for an update------ -   For each @pInfos@[i], @dstAccelerationStructure@ /must/ have been---     created with compatible 'AccelerationStructureCreateInfoKHR' where---     'AccelerationStructureCreateInfoKHR'::@type@ and---     'AccelerationStructureCreateInfoKHR'::@flags@ are identical to---     'AccelerationStructureBuildGeometryInfoKHR'::@type@ and---     'AccelerationStructureBuildGeometryInfoKHR'::@flags@ respectively,---     'AccelerationStructureBuildGeometryInfoKHR'::@geometryCount@ for---     @dstAccelerationStructure@ are greater than or equal to the build---     size, and each geometry in---     'AccelerationStructureBuildGeometryInfoKHR'::@ppGeometries@ for---     @dstAccelerationStructure@ has greater than or equal to the number---     of vertices, indices, and AABBs,---     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ is---     both 0 or both non-zero, and all other parameters are the same------ -   For each @pInfos@[i], if @update@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', then objects that were---     previously active for that acceleration structure /must/ not be made---     inactive as per---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>------ -   For each @pInfos@[i], if @update@ is---     'Vulkan.Core10.FundamentalTypes.TRUE', then objects that were---     previously inactive for that acceleration structure /must/ not be---     made active as per---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>------ -   Any acceleration structure instance in any top level build in this---     command /must/ not reference any bottom level acceleration structure---     built by this command------ -   There /must/ not be any---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>---     between the scratch memories that are provided in all the---     @pInfos@[i].@scratchData@ memories for the acceleration structure---     builds------ -   There /must/ not be any---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>---     between memory bound to any top level, bottom level, or instance---     acceleration structure accessed by this command------ -   All 'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR'---     referenced by this command /must/ contain valid host addresses------ -   All 'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects---     referenced by this command /must/ be bound to host-visible memory------ -   The---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pInfos@ /must/ be a valid pointer to an array of @infoCount@ valid---     'AccelerationStructureBuildGeometryInfoKHR' structures------ -   @ppOffsetInfos@ /must/ be a valid pointer to an array of @infoCount@---     'AccelerationStructureBuildOffsetInfoKHR' structures------ -   @infoCount@ /must/ be greater than @0@------ == Return Codes------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]------     -   'Vulkan.Core10.Enums.Result.SUCCESS'------     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'------     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'------ [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'------     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'------ = See Also------ 'AccelerationStructureBuildGeometryInfoKHR',--- 'AccelerationStructureBuildOffsetInfoKHR',--- 'Vulkan.Core10.Handles.Device'-buildAccelerationStructureKHR :: forall io-                               . (MonadIO io)-                              => -- No documentation found for Nested "vkBuildAccelerationStructureKHR" "device"-                                 Device-                              -> -- No documentation found for Nested "vkBuildAccelerationStructureKHR" "pInfos"-                                 ("infos" ::: Vector (SomeStruct AccelerationStructureBuildGeometryInfoKHR))-                              -> -- No documentation found for Nested "vkBuildAccelerationStructureKHR" "ppOffsetInfos"-                                 ("offsetInfos" ::: Vector AccelerationStructureBuildOffsetInfoKHR)-                              -> io (Result)-buildAccelerationStructureKHR device infos offsetInfos = liftIO . evalContT $ do-  let vkBuildAccelerationStructureKHRPtr = pVkBuildAccelerationStructureKHR (deviceCmds (device :: Device))-  lift $ unless (vkBuildAccelerationStructureKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBuildAccelerationStructureKHR is null" Nothing Nothing-  let vkBuildAccelerationStructureKHR' = mkVkBuildAccelerationStructureKHR vkBuildAccelerationStructureKHRPtr-  let pInfosLength = Data.Vector.length $ (infos)-  lift $ unless ((Data.Vector.length $ (offsetInfos)) == pInfosLength) $-    throwIO $ IOError Nothing InvalidArgument "" "ppOffsetInfos and pInfos must have the same length" Nothing Nothing-  pPInfos <- ContT $ allocaBytesAligned @(AccelerationStructureBuildGeometryInfoKHR _) ((Data.Vector.length (infos)) * 72) 8-  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInfos `plusPtr` (72 * (i)) :: Ptr (AccelerationStructureBuildGeometryInfoKHR _))) (e) . ($ ())) (infos)-  pPpOffsetInfos <- ContT $ allocaBytesAligned @(Ptr AccelerationStructureBuildOffsetInfoKHR) ((Data.Vector.length (offsetInfos)) * 8) 8-  Data.Vector.imapM_ (\i e -> do-    ppOffsetInfos <- ContT $ withCStruct (e)-    lift $ poke (pPpOffsetInfos `plusPtr` (8 * (i)) :: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) ppOffsetInfos) (offsetInfos)-  r <- lift $ vkBuildAccelerationStructureKHR' (deviceHandle (device)) ((fromIntegral pInfosLength :: Word32)) (forgetExtensions (pPInfos)) (pPpOffsetInfos)-  lift $ when (r < SUCCESS) (throwIO (VulkanException r))-  pure $ (r)---foreign import ccall-#if !defined(SAFE_FOREIGN_CALLS)-  unsafe-#endif-  "dynamic" mkVkGetAccelerationStructureDeviceAddressKHR-  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress) -> Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress---- | vkGetAccelerationStructureDeviceAddressKHR - Query an address of a--- acceleration structure------ = Description------ The 64-bit return value is an address of the acceleration structure,--- which can be used for device and shader operations that involve--- acceleration structures, such as ray traversal and acceleration--- structure building.------ If the acceleration structure was created with a non-zero value of--- 'AccelerationStructureCreateInfoKHR'::@deviceAddress@ the return value--- will be the same address.------ == Valid Usage------ -   If @device@ was created with multiple physical devices, then the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>---     feature /must/ be enabled------ == Valid Usage (Implicit)------ -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle------ -   @pInfo@ /must/ be a valid pointer to a valid---     'AccelerationStructureDeviceAddressInfoKHR' structure------ = See Also------ 'AccelerationStructureDeviceAddressInfoKHR',--- 'Vulkan.Core10.Handles.Device'-getAccelerationStructureDeviceAddressKHR :: forall io-                                          . (MonadIO io)-                                         => -- | @device@ is the logical device that the accelerationStructure was-                                            -- created on.-                                            Device-                                         -> -- | @pInfo@ is a pointer to a 'AccelerationStructureDeviceAddressInfoKHR'-                                            -- structure specifying the acceleration structure to retrieve an address-                                            -- for.-                                            AccelerationStructureDeviceAddressInfoKHR-                                         -> io (DeviceAddress)-getAccelerationStructureDeviceAddressKHR device info = liftIO . evalContT $ do-  let vkGetAccelerationStructureDeviceAddressKHRPtr = pVkGetAccelerationStructureDeviceAddressKHR (deviceCmds (device :: Device))-  lift $ unless (vkGetAccelerationStructureDeviceAddressKHRPtr /= nullFunPtr) $-    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureDeviceAddressKHR is null" Nothing Nothing-  let vkGetAccelerationStructureDeviceAddressKHR' = mkVkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHRPtr-  pInfo <- ContT $ withCStruct (info)-  r <- lift $ vkGetAccelerationStructureDeviceAddressKHR' (deviceHandle (device)) pInfo-  pure $ (r)----- | VkRayTracingShaderGroupCreateInfoKHR - Structure specifying shaders in a--- shader group------ == Valid Usage------ -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then---     @generalShader@ /must/ be a valid index into---     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader---     of---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR',---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR',---     or---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR'------ -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then---     @closestHitShader@, @anyHitShader@, and @intersectionShader@ /must/---     be 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'------ -   If @type@ is---     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' then---     @intersectionShader@ /must/ be a valid index into---     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader---     of---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_INTERSECTION_BIT_KHR'------ -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR'---     then @intersectionShader@ /must/ be---     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'------ -   @closestHitShader@ /must/ be either---     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid index into---     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader---     of---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CLOSEST_HIT_BIT_KHR'------ -   @anyHitShader@ /must/ be either---     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid index into---     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader---     of---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ANY_HIT_BIT_KHR'------ -   If---     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplayMixed@---     is 'Vulkan.Core10.FundamentalTypes.FALSE' then---     @pShaderGroupCaptureReplayHandle@ /must/ not be provided if it has---     not been provided on a previous call to ray tracing pipeline---     creation------ -   If---     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplayMixed@---     is 'Vulkan.Core10.FundamentalTypes.FALSE' then the caller /must/---     guarantee that no ray tracing pipeline creation commands with---     @pShaderGroupCaptureReplayHandle@ provided execute simultaneously---     with ray tracing pipeline creation commands without---     @pShaderGroupCaptureReplayHandle@ provided------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @type@ /must/ be a valid 'RayTracingShaderGroupTypeKHR' value------ = See Also------ 'RayTracingPipelineCreateInfoKHR', 'RayTracingShaderGroupTypeKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data RayTracingShaderGroupCreateInfoKHR = RayTracingShaderGroupCreateInfoKHR-  { -- | @type@ is the type of hit group specified in this structure.-    type' :: RayTracingShaderGroupTypeKHR-  , -- | @generalShader@ is the index of the ray generation, miss, or callable-    -- shader from 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if-    -- the shader group has @type@ of-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR', and-    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.-    generalShader :: Word32-  , -- | @closestHitShader@ is the optional index of the closest hit shader from-    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader-    -- group has @type@ of-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and-    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.-    closestHitShader :: Word32-  , -- | @anyHitShader@ is the optional index of the any-hit shader from-    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader-    -- group has @type@ of-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and-    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.-    anyHitShader :: Word32-  , -- | @intersectionShader@ is the index of the intersection shader from-    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader-    -- group has @type@ of-    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and-    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.-    intersectionShader :: Word32-  , -- | @pShaderGroupCaptureReplayHandle@ is an optional pointer to replay-    -- information for this shader group. Ignored if-    -- 'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@-    -- is 'Vulkan.Core10.FundamentalTypes.FALSE'.-    shaderGroupCaptureReplayHandle :: Ptr ()-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (RayTracingShaderGroupCreateInfoKHR)-#endif-deriving instance Show RayTracingShaderGroupCreateInfoKHR--instance ToCStruct RayTracingShaderGroupCreateInfoKHR where-  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p RayTracingShaderGroupCreateInfoKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (type')-    poke ((p `plusPtr` 20 :: Ptr Word32)) (generalShader)-    poke ((p `plusPtr` 24 :: Ptr Word32)) (closestHitShader)-    poke ((p `plusPtr` 28 :: Ptr Word32)) (anyHitShader)-    poke ((p `plusPtr` 32 :: Ptr Word32)) (intersectionShader)-    poke ((p `plusPtr` 40 :: Ptr (Ptr ()))) (shaderGroupCaptureReplayHandle)-    f-  cStructSize = 48-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (zero)-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)-    f--instance FromCStruct RayTracingShaderGroupCreateInfoKHR where-  peekCStruct p = do-    type' <- peek @RayTracingShaderGroupTypeKHR ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR))-    generalShader <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    closestHitShader <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))-    anyHitShader <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))-    intersectionShader <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))-    pShaderGroupCaptureReplayHandle <- peek @(Ptr ()) ((p `plusPtr` 40 :: Ptr (Ptr ())))-    pure $ RayTracingShaderGroupCreateInfoKHR-             type' generalShader closestHitShader anyHitShader intersectionShader pShaderGroupCaptureReplayHandle--instance Storable RayTracingShaderGroupCreateInfoKHR where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero RayTracingShaderGroupCreateInfoKHR where-  zero = RayTracingShaderGroupCreateInfoKHR-           zero-           zero-           zero-           zero-           zero-           zero----- | VkRayTracingPipelineCreateInfoKHR - Structure specifying parameters of a--- newly created ray tracing pipeline------ = Description------ The parameters @basePipelineHandle@ and @basePipelineIndex@ are--- described in more detail in--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.------ When--- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'--- is specified, this pipeline defines a /pipeline library/ which /cannot/--- be bound as a ray tracing pipeline directly. Instead, pipeline libraries--- define common shaders and shader groups which /can/ be included in--- future pipeline creation.------ If pipeline libraries are included in @libraries@, shaders defined in--- those libraries are treated as if they were defined as additional--- entries in @pStages@, appended in the order they appear in the--- @pLibraries@ array and in the @pStages@ array when those libraries were--- defined.------ When referencing shader groups in order to obtain a shader group handle,--- groups defined in those libraries are treated as if they were defined as--- additional entries in @pGroups@, appended in the order they appear in--- the @pLibraries@ array and in the @pGroups@ array when those libraries--- were defined. The shaders these groups reference are set when the--- pipeline library is created, referencing those specified in the pipeline--- library, not in the pipeline that includes it.------ If the--- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'--- structure is included in the @pNext@ chain of--- 'RayTracingPipelineCreateInfoKHR', the operation of this pipeline--- creation is /deferred/, as defined in the--- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>--- chapter.------ == Valid Usage------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineIndex@ is @-1@, @basePipelineHandle@ /must/---     be a valid handle to a ray tracing 'Vulkan.Core10.Handles.Pipeline'------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineHandle@ is---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/---     be a valid index into the calling command’s @pCreateInfos@ parameter------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineIndex@ is not @-1@, @basePipelineHandle@---     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If @flags@ contains the---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'---     flag, and @basePipelineHandle@ is not---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/---     be @-1@------ -   The @stage@ member of at least one element of @pStages@ /must/ be---     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR'------ -   The shader code for the entry points identified by @pStages@, and---     the rest of the state identified by this structure /must/ adhere to---     the pipeline linking rules described in the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>---     chapter------ -   @layout@ /must/ be---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>---     with all shaders specified in @pStages@------ -   The number of resources in @layout@ accessible to each shader stage---     that is used by the pipeline /must/ be less than or equal to---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@------ -   @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>---     feature is not enabled, @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'---     or---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'------ -   @maxRecursionDepth@ /must/ be less than or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxRecursionDepth@------ -   If @flags@ includes---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR',---     @pLibraryInterface@ /must/ not be @NULL@------ -   If the @libraryCount@ member of @libraries@ is greater than @0@,---     @pLibraryInterface@ /must/ not be @NULL@------ -   Each element of the @pLibraries@ member of @libraries@ /must/ have---     been created with the value of @maxRecursionDepth@ equal to that in---     this pipeline------ -   Each element of the @pLibraries@ member of @libraries@ /must/ have---     been created with a @layout@ that is compatible with the @layout@ in---     this pipeline------ -   Each element of the @pLibraries@ member of @libraries@ /must/ have---     been created with values of the @maxPayloadSize@,---     @maxAttributeSize@, and @maxCallableSize@ members of---     @pLibraryInterface@ equal to those in this pipeline------ -   If @flags@ includes---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',---     for any element of @pGroups@ with a @type@ of---     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or---     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the---     @anyHitShader@ of that element /must/ not be---     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'------ -   If @flags@ includes---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',---     for any element of @pGroups@ with a @type@ of---     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or---     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the---     @closestHitShader@ of that element /must/ not be---     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPrimitiveCulling rayTracingPrimitiveCulling>---     feature is not enabled, @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'------ -   If the---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPrimitiveCulling rayTracingPrimitiveCulling>---     feature is not enabled, @flags@ /must/ not include---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'------ -   If @libraries.libraryCount@ is zero, then @stageCount@ /must/ not be---     zero------ -   If @libraries.libraryCount@ is zero, then @groupCount@ /must/ not be---     zero------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR'------ -   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---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'---     or---     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @flags@ /must/ be a valid combination of---     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'---     values------ -   If @stageCount@ is not @0@, @pStages@ /must/ be a valid pointer to---     an array of @stageCount@ valid---     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures------ -   If @groupCount@ is not @0@, @pGroups@ /must/ be a valid pointer to---     an array of @groupCount@ valid 'RayTracingShaderGroupCreateInfoKHR'---     structures------ -   @libraries@ /must/ be a valid---     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'---     structure------ -   If @pLibraryInterface@ is not @NULL@, @pLibraryInterface@ /must/ be---     a valid pointer to a valid---     'RayTracingPipelineInterfaceCreateInfoKHR' structure------ -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'---     handle------ -   Both of @basePipelineHandle@, and @layout@ that are valid handles of---     non-ignored parameters /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Core10.Handles.Pipeline',--- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',--- 'Vulkan.Core10.Handles.PipelineLayout',--- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',--- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',--- 'RayTracingPipelineInterfaceCreateInfoKHR',--- 'RayTracingShaderGroupCreateInfoKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'createRayTracingPipelinesKHR'-data RayTracingPipelineCreateInfoKHR (es :: [Type]) = RayTracingPipelineCreateInfoKHR-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @flags@ is a bitmask of-    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'-    -- specifying how the pipeline will be generated.-    flags :: PipelineCreateFlags-  , -- | @pStages@ is a pointer to an array of @stageCount@-    -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures-    -- describing the set of the shader stages to be included in the ray-    -- tracing pipeline.-    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)-  , -- | @pGroups@ is a pointer to an array of @groupCount@-    -- 'RayTracingShaderGroupCreateInfoKHR' structures describing the set of-    -- the shader stages to be included in each shader group in the ray tracing-    -- pipeline.-    groups :: Vector RayTracingShaderGroupCreateInfoKHR-  , -- | @maxRecursionDepth@ is the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth maximum recursion depth>-    -- of shaders executed by this pipeline.-    maxRecursionDepth :: Word32-  , -- | @libraries@ is a-    -- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'-    -- structure defining pipeline libraries to include.-    libraries :: PipelineLibraryCreateInfoKHR-  , -- | @pLibraryInterface@ is a pointer to a-    -- 'RayTracingPipelineInterfaceCreateInfoKHR' structure defining additional-    -- information when using pipeline libraries.-    libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR-  , -- | @layout@ is the description of binding locations used by both the-    -- pipeline and descriptor sets used with the pipeline.-    layout :: PipelineLayout-  , -- | @basePipelineHandle@ is a pipeline to derive from.-    basePipelineHandle :: Pipeline-  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use-    -- as a pipeline to derive from.-    basePipelineIndex :: Int32-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (RayTracingPipelineCreateInfoKHR (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (RayTracingPipelineCreateInfoKHR es)--instance Extensible RayTracingPipelineCreateInfoKHR where-  extensibleType = STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR-  setNext x next = x{next = next}-  getNext RayTracingPipelineCreateInfoKHR{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoKHR e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f-    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f-    | otherwise = Nothing--instance (Extendss RayTracingPipelineCreateInfoKHR es, PokeChain es) => ToCStruct (RayTracingPipelineCreateInfoKHR es) where-  withCStruct x f = allocaBytesAligned 120 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p RayTracingPipelineCreateInfoKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)-    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32))-    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (groups)) * 48) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (e) . ($ ())) (groups)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups')-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxRecursionDepth)-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR)) (libraries) . ($ ())-    pLibraryInterface'' <- case (libraryInterface) of-      Nothing -> pure nullPtr-      Just j -> ContT $ withCStruct (j)-    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR))) pLibraryInterface''-    lift $ poke ((p `plusPtr` 96 :: Ptr PipelineLayout)) (layout)-    lift $ poke ((p `plusPtr` 104 :: Ptr Pipeline)) (basePipelineHandle)-    lift $ poke ((p `plusPtr` 112 :: Ptr Int32)) (basePipelineIndex)-    lift $ f-  cStructSize = 120-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')-    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (mempty)) * 48) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups')-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR)) (zero) . ($ ())-    lift $ poke ((p `plusPtr` 96 :: Ptr PipelineLayout)) (zero)-    lift $ poke ((p `plusPtr` 112 :: Ptr Int32)) (zero)-    lift $ f--instance (Extendss RayTracingPipelineCreateInfoKHR es, PeekChain es) => FromCStruct (RayTracingPipelineCreateInfoKHR es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))-    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))-    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))-    groupCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))-    pGroups <- peek @(Ptr RayTracingShaderGroupCreateInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)))-    pGroups' <- generateM (fromIntegral groupCount) (\i -> peekCStruct @RayTracingShaderGroupCreateInfoKHR ((pGroups `advancePtrBytes` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR)))-    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))-    libraries <- peekCStruct @PipelineLibraryCreateInfoKHR ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR))-    pLibraryInterface <- peek @(Ptr RayTracingPipelineInterfaceCreateInfoKHR) ((p `plusPtr` 88 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR)))-    pLibraryInterface' <- maybePeek (\j -> peekCStruct @RayTracingPipelineInterfaceCreateInfoKHR (j)) pLibraryInterface-    layout <- peek @PipelineLayout ((p `plusPtr` 96 :: Ptr PipelineLayout))-    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 104 :: Ptr Pipeline))-    basePipelineIndex <- peek @Int32 ((p `plusPtr` 112 :: Ptr Int32))-    pure $ RayTracingPipelineCreateInfoKHR-             next flags pStages' pGroups' maxRecursionDepth libraries pLibraryInterface' layout basePipelineHandle basePipelineIndex--instance es ~ '[] => Zero (RayTracingPipelineCreateInfoKHR es) where-  zero = RayTracingPipelineCreateInfoKHR-           ()-           zero-           mempty-           mempty-           zero-           zero-           Nothing-           zero-           zero-           zero----- | VkBindAccelerationStructureMemoryInfoKHR - Structure specifying--- acceleration structure memory binding------ == Valid Usage------ -   @accelerationStructure@ /must/ not already be backed by a memory---     object------ -   @memoryOffset@ /must/ be less than the size of @memory@------ -   @memory@ /must/ have been allocated using one of the memory types---     allowed in the @memoryTypeBits@ member of the---     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure---     returned from a call to---     'getAccelerationStructureMemoryRequirementsKHR' with---     @accelerationStructure@ and @type@ of---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR'------ -   @memoryOffset@ /must/ be an integer multiple of the @alignment@---     member of the 'Vulkan.Core10.MemoryManagement.MemoryRequirements'---     structure returned from a call to---     'getAccelerationStructureMemoryRequirementsKHR' with---     @accelerationStructure@ and @type@ of---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR'------ -   The @size@ member of the---     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure---     returned from a call to---     'getAccelerationStructureMemoryRequirementsKHR' with---     @accelerationStructure@ and @type@ of---     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR' /must/---     be less than or equal to the size of @memory@ minus @memoryOffset@------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @accelerationStructure@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ -   @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'---     handle------ -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid---     pointer to an array of @deviceIndexCount@ @uint32_t@ values------ -   Both of @accelerationStructure@, and @memory@ /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'Vulkan.Core10.Handles.DeviceMemory',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'bindAccelerationStructureMemoryKHR',--- 'Vulkan.Extensions.VK_NV_ray_tracing.bindAccelerationStructureMemoryNV'-data BindAccelerationStructureMemoryInfoKHR = BindAccelerationStructureMemoryInfoKHR-  { -- | @accelerationStructure@ is the acceleration structure to be attached to-    -- memory.-    accelerationStructure :: AccelerationStructureKHR-  , -- | @memory@ is a 'Vulkan.Core10.Handles.DeviceMemory' object describing the-    -- device memory to attach.-    memory :: DeviceMemory-  , -- | @memoryOffset@ is the start offset of the region of memory that is to be-    -- bound to the acceleration structure. The number of bytes returned in the-    -- 'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ member in-    -- @memory@, starting from @memoryOffset@ bytes, will be bound to the-    -- specified acceleration structure.-    memoryOffset :: DeviceSize-  , -- | @pDeviceIndices@ is a pointer to an array of device indices.-    deviceIndices :: Vector Word32-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (BindAccelerationStructureMemoryInfoKHR)-#endif-deriving instance Show BindAccelerationStructureMemoryInfoKHR--instance ToCStruct BindAccelerationStructureMemoryInfoKHR where-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p BindAccelerationStructureMemoryInfoKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (accelerationStructure)-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (memory)-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (memoryOffset)-    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceIndices)) :: Word32))-    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceIndices)) * 4) 4-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceIndices)-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPDeviceIndices')-    lift $ f-  cStructSize = 56-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (zero)-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)-    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4-    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)-    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPDeviceIndices')-    lift $ f--instance FromCStruct BindAccelerationStructureMemoryInfoKHR where-  peekCStruct p = do-    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))-    memory <- peek @DeviceMemory ((p `plusPtr` 24 :: Ptr DeviceMemory))-    memoryOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))-    deviceIndexCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))-    pDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))-    pDeviceIndices' <- generateM (fromIntegral deviceIndexCount) (\i -> peek @Word32 ((pDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))-    pure $ BindAccelerationStructureMemoryInfoKHR-             accelerationStructure memory memoryOffset pDeviceIndices'--instance Zero BindAccelerationStructureMemoryInfoKHR where-  zero = BindAccelerationStructureMemoryInfoKHR-           zero-           zero-           zero-           mempty----- | VkWriteDescriptorSetAccelerationStructureKHR - Structure specifying--- acceleration structure descriptor info------ == Valid Usage------ -   @accelerationStructureCount@ /must/ be equal to @descriptorCount@ in---     the extended structure------ -   Each acceleration structure in @pAccelerationStructures@ /must/ have---     been created with 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR'------ -   @pAccelerationStructures@ /must/ be a valid pointer to an array of---     @accelerationStructureCount@ valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles------ -   @accelerationStructureCount@ /must/ be greater than @0@------ = See Also------ 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data WriteDescriptorSetAccelerationStructureKHR = WriteDescriptorSetAccelerationStructureKHR-  { -- | @pAccelerationStructures@ are the acceleration structures to update.-    accelerationStructures :: Vector AccelerationStructureKHR }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (WriteDescriptorSetAccelerationStructureKHR)-#endif-deriving instance Show WriteDescriptorSetAccelerationStructureKHR--instance ToCStruct WriteDescriptorSetAccelerationStructureKHR where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p WriteDescriptorSetAccelerationStructureKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32))-    pPAccelerationStructures' <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures' `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR))) (pPAccelerationStructures')-    lift $ f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    pPAccelerationStructures' <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (mempty)) * 8) 8-    lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures' `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (mempty)-    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR))) (pPAccelerationStructures')-    lift $ f--instance FromCStruct WriteDescriptorSetAccelerationStructureKHR where-  peekCStruct p = do-    accelerationStructureCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))-    pAccelerationStructures <- peek @(Ptr AccelerationStructureKHR) ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR)))-    pAccelerationStructures' <- generateM (fromIntegral accelerationStructureCount) (\i -> peek @AccelerationStructureKHR ((pAccelerationStructures `advancePtrBytes` (8 * (i)) :: Ptr AccelerationStructureKHR)))-    pure $ WriteDescriptorSetAccelerationStructureKHR-             pAccelerationStructures'--instance Zero WriteDescriptorSetAccelerationStructureKHR where-  zero = WriteDescriptorSetAccelerationStructureKHR-           mempty----- | VkAccelerationStructureMemoryRequirementsInfoKHR - Structure specifying--- acceleration to query for memory requirements------ == Valid Usage (Implicit)------ = See Also------ 'AccelerationStructureBuildTypeKHR',--- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'AccelerationStructureMemoryRequirementsTypeKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'getAccelerationStructureMemoryRequirementsKHR'-data AccelerationStructureMemoryRequirementsInfoKHR = AccelerationStructureMemoryRequirementsInfoKHR-  { -- | @type@ selects the type of memory requirement being queried.-    -- 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR' returns the-    -- memory requirements for the object itself.-    -- 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR'-    -- returns the memory requirements for the scratch memory when doing a-    -- build.-    -- 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR'-    -- returns the memory requirements for the scratch memory when doing an-    -- update.-    ---    -- @type@ /must/ be a valid-    -- 'AccelerationStructureMemoryRequirementsTypeKHR' value-    type' :: AccelerationStructureMemoryRequirementsTypeKHR-  , -- | @buildType@ selects the build types whose memory requirements are being-    -- queried.-    ---    -- @buildType@ /must/ be a valid 'AccelerationStructureBuildTypeKHR' value-    buildType :: AccelerationStructureBuildTypeKHR-  , -- | @accelerationStructure@ is the acceleration structure to be queried for-    -- memory requirements.-    ---    -- @accelerationStructure@ /must/ be a valid-    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle-    accelerationStructure :: AccelerationStructureKHR-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureMemoryRequirementsInfoKHR)-#endif-deriving instance Show AccelerationStructureMemoryRequirementsInfoKHR--instance ToCStruct AccelerationStructureMemoryRequirementsInfoKHR where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureMemoryRequirementsInfoKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR)) (type')-    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR)) (buildType)-    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (accelerationStructure)-    f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR)) (zero)-    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR)) (zero)-    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)-    f--instance FromCStruct AccelerationStructureMemoryRequirementsInfoKHR where-  peekCStruct p = do-    type' <- peek @AccelerationStructureMemoryRequirementsTypeKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR))-    buildType <- peek @AccelerationStructureBuildTypeKHR ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR))-    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR))-    pure $ AccelerationStructureMemoryRequirementsInfoKHR-             type' buildType accelerationStructure--instance Storable AccelerationStructureMemoryRequirementsInfoKHR where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero AccelerationStructureMemoryRequirementsInfoKHR where-  zero = AccelerationStructureMemoryRequirementsInfoKHR-           zero-           zero-           zero----- | VkPhysicalDeviceRayTracingFeaturesKHR - Structure describing the ray--- tracing features that can be supported by an implementation------ = Members------ The members of the 'PhysicalDeviceRayTracingFeaturesKHR' structure--- describe the following features:------ = Description------ -   @rayTracing@ indicates whether the implementation supports ray---     tracing functionality. See---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing Ray Tracing>.------ -   @rayTracingShaderGroupHandleCaptureReplay@ indicates whether the---     implementation supports saving and reusing shader group handles,---     e.g. for trace capture and replay.------ -   @rayTracingShaderGroupHandleCaptureReplayMixed@ indicates whether---     the implementation supports reuse of shader group handles being---     arbitrarily mixed with creation of non-reused shader group handles.---     If this is 'Vulkan.Core10.FundamentalTypes.FALSE', all reused shader---     group handles /must/ be specified before any non-reused handles---     /may/ be created.------ -   @rayTracingAccelerationStructureCaptureReplay@ indicates whether the---     implementation supports saving and reusing acceleration structure---     device addresses, e.g. for trace capture and replay.------ -   @rayTracingIndirectTraceRays@ indicates whether the implementation---     supports indirect trace ray commands, e.g.---     'cmdTraceRaysIndirectKHR'.------ -   @rayTracingIndirectAccelerationStructureBuild@ indicates whether the---     implementation supports indirect acceleration structure build---     commands, e.g. 'cmdBuildAccelerationStructureIndirectKHR'.------ -   @rayTracingHostAccelerationStructureCommands@ indicates whether the---     implementation supports host side acceleration structure commands,---     e.g. 'buildAccelerationStructureKHR',---     'copyAccelerationStructureKHR',---     'copyAccelerationStructureToMemoryKHR',---     'copyMemoryToAccelerationStructureKHR',---     'writeAccelerationStructuresPropertiesKHR'.------ -   @rayQuery@ indicates whether the implementation supports ray query---     (@OpRayQueryProceedKHR@) functionality.------ -   @rayTracingPrimitiveCulling@ indicates whether the implementation---     supports---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-traversal-culling-primitive primitive culling during ray traversal>.------ If the 'PhysicalDeviceRayTracingFeaturesKHR' structure is included in--- the @pNext@ chain of--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',--- it is filled with values indicating whether the feature is supported.--- 'PhysicalDeviceRayTracingFeaturesKHR' /can/ also be used in the @pNext@--- chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.------ == Valid Usage------ -   If @rayTracingShaderGroupHandleCaptureReplayMixed@ is---     'Vulkan.Core10.FundamentalTypes.TRUE',---     @rayTracingShaderGroupHandleCaptureReplay@ /must/ also be---     'Vulkan.Core10.FundamentalTypes.TRUE'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR'------ = See Also------ 'Vulkan.Core10.FundamentalTypes.Bool32',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data PhysicalDeviceRayTracingFeaturesKHR = PhysicalDeviceRayTracingFeaturesKHR-  { -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracing"-    rayTracing :: Bool-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingShaderGroupHandleCaptureReplay"-    rayTracingShaderGroupHandleCaptureReplay :: Bool-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingShaderGroupHandleCaptureReplayMixed"-    rayTracingShaderGroupHandleCaptureReplayMixed :: Bool-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingAccelerationStructureCaptureReplay"-    rayTracingAccelerationStructureCaptureReplay :: Bool-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingIndirectTraceRays"-    rayTracingIndirectTraceRays :: Bool-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingIndirectAccelerationStructureBuild"-    rayTracingIndirectAccelerationStructureBuild :: Bool-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingHostAccelerationStructureCommands"-    rayTracingHostAccelerationStructureCommands :: Bool-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayQuery"-    rayQuery :: Bool-  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingPrimitiveCulling"-    rayTracingPrimitiveCulling :: Bool-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PhysicalDeviceRayTracingFeaturesKHR)-#endif-deriving instance Show PhysicalDeviceRayTracingFeaturesKHR--instance ToCStruct PhysicalDeviceRayTracingFeaturesKHR where-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PhysicalDeviceRayTracingFeaturesKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (rayTracing))-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (rayTracingShaderGroupHandleCaptureReplay))-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rayTracingShaderGroupHandleCaptureReplayMixed))-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (rayTracingAccelerationStructureCaptureReplay))-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (rayTracingIndirectTraceRays))-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (rayTracingIndirectAccelerationStructureBuild))-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (rayTracingHostAccelerationStructureCommands))-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (rayQuery))-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (rayTracingPrimitiveCulling))-    f-  cStructSize = 56-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))-    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))-    f--instance FromCStruct PhysicalDeviceRayTracingFeaturesKHR where-  peekCStruct p = do-    rayTracing <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))-    rayTracingShaderGroupHandleCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))-    rayTracingShaderGroupHandleCaptureReplayMixed <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))-    rayTracingAccelerationStructureCaptureReplay <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))-    rayTracingIndirectTraceRays <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))-    rayTracingIndirectAccelerationStructureBuild <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))-    rayTracingHostAccelerationStructureCommands <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))-    rayQuery <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))-    rayTracingPrimitiveCulling <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))-    pure $ PhysicalDeviceRayTracingFeaturesKHR-             (bool32ToBool rayTracing) (bool32ToBool rayTracingShaderGroupHandleCaptureReplay) (bool32ToBool rayTracingShaderGroupHandleCaptureReplayMixed) (bool32ToBool rayTracingAccelerationStructureCaptureReplay) (bool32ToBool rayTracingIndirectTraceRays) (bool32ToBool rayTracingIndirectAccelerationStructureBuild) (bool32ToBool rayTracingHostAccelerationStructureCommands) (bool32ToBool rayQuery) (bool32ToBool rayTracingPrimitiveCulling)--instance Storable PhysicalDeviceRayTracingFeaturesKHR where-  sizeOf ~_ = 56-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero PhysicalDeviceRayTracingFeaturesKHR where-  zero = PhysicalDeviceRayTracingFeaturesKHR-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero----- | VkPhysicalDeviceRayTracingPropertiesKHR - Properties of the physical--- device for ray tracing------ = Description------ If the 'PhysicalDeviceRayTracingPropertiesKHR' structure is included in--- the @pNext@ chain of--- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',--- it is filled with the implementation-dependent limits.------ Limits specified by this structure /must/ match those specified with the--- same name in--- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV'.------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Core10.Enums.StructureType.StructureType'-data PhysicalDeviceRayTracingPropertiesKHR = PhysicalDeviceRayTracingPropertiesKHR-  { -- | @shaderGroupHandleSize@ size in bytes of the shader header.-    shaderGroupHandleSize :: Word32-  , -- | @maxRecursionDepth@ is the maximum number of levels of recursion allowed-    -- in a trace command.-    maxRecursionDepth :: Word32-  , -- | @maxShaderGroupStride@ is the maximum stride in bytes allowed between-    -- shader groups in the SBT.-    maxShaderGroupStride :: Word32-  , -- | @shaderGroupBaseAlignment@ is the required alignment in bytes for the-    -- base of the SBTs.-    shaderGroupBaseAlignment :: Word32-  , -- | @maxGeometryCount@ is the maximum number of geometries in the bottom-    -- level acceleration structure.-    maxGeometryCount :: Word64-  , -- | @maxInstanceCount@ is the maximum number of instances in the top level-    -- acceleration structure.-    maxInstanceCount :: Word64-  , -- | @maxPrimitiveCount@ is the maximum number of triangles or AABBs in all-    -- geometries in the bottom level acceleration structure.-    maxPrimitiveCount :: Word64-  , -- | @maxDescriptorSetAccelerationStructures@ is the maximum number of-    -- acceleration structure descriptors that are allowed in a descriptor set.-    maxDescriptorSetAccelerationStructures :: Word32-  , -- | @shaderGroupHandleCaptureReplaySize@ is the number of bytes for the-    -- information required to do capture and replay for shader group handles.-    shaderGroupHandleCaptureReplaySize :: Word32-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (PhysicalDeviceRayTracingPropertiesKHR)-#endif-deriving instance Show PhysicalDeviceRayTracingPropertiesKHR--instance ToCStruct PhysicalDeviceRayTracingPropertiesKHR where-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p PhysicalDeviceRayTracingPropertiesKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderGroupHandleSize)-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxRecursionDepth)-    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxShaderGroupStride)-    poke ((p `plusPtr` 28 :: Ptr Word32)) (shaderGroupBaseAlignment)-    poke ((p `plusPtr` 32 :: Ptr Word64)) (maxGeometryCount)-    poke ((p `plusPtr` 40 :: Ptr Word64)) (maxInstanceCount)-    poke ((p `plusPtr` 48 :: Ptr Word64)) (maxPrimitiveCount)-    poke ((p `plusPtr` 56 :: Ptr Word32)) (maxDescriptorSetAccelerationStructures)-    poke ((p `plusPtr` 60 :: Ptr Word32)) (shaderGroupHandleCaptureReplaySize)-    f-  cStructSize = 64-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)-    poke ((p `plusPtr` 40 :: Ptr Word64)) (zero)-    poke ((p `plusPtr` 48 :: Ptr Word64)) (zero)-    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)-    f--instance FromCStruct PhysicalDeviceRayTracingPropertiesKHR where-  peekCStruct p = do-    shaderGroupHandleSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))-    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    maxShaderGroupStride <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))-    shaderGroupBaseAlignment <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))-    maxGeometryCount <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))-    maxInstanceCount <- peek @Word64 ((p `plusPtr` 40 :: Ptr Word64))-    maxPrimitiveCount <- peek @Word64 ((p `plusPtr` 48 :: Ptr Word64))-    maxDescriptorSetAccelerationStructures <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))-    shaderGroupHandleCaptureReplaySize <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))-    pure $ PhysicalDeviceRayTracingPropertiesKHR-             shaderGroupHandleSize maxRecursionDepth maxShaderGroupStride shaderGroupBaseAlignment maxGeometryCount maxInstanceCount maxPrimitiveCount maxDescriptorSetAccelerationStructures shaderGroupHandleCaptureReplaySize--instance Storable PhysicalDeviceRayTracingPropertiesKHR where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero PhysicalDeviceRayTracingPropertiesKHR where-  zero = PhysicalDeviceRayTracingPropertiesKHR-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero-           zero----- | VkStridedBufferRegionKHR - Structure specifying a region of a VkBuffer--- with a stride------ == Valid Usage------ -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @size@---     plus @offset@ /must/ be less than or equal to the size of @buffer@------ -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @stride@ /must/ be less than the size of @buffer@------ == Valid Usage (Implicit)------ -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle------ = See Also------ 'Vulkan.Core10.Handles.Buffer',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'cmdTraceRaysIndirectKHR',--- 'cmdTraceRaysKHR'-data StridedBufferRegionKHR = StridedBufferRegionKHR-  { -- | @buffer@ is the buffer containing this region.-    buffer :: Buffer-  , -- | @offset@ is the byte offset in @buffer@ at which the region starts.-    offset :: DeviceSize-  , -- | @stride@ is the byte stride between consecutive elements.-    stride :: DeviceSize-  , -- | @size@ is the size in bytes of the region starting at @offset@.-    size :: DeviceSize-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (StridedBufferRegionKHR)-#endif-deriving instance Show StridedBufferRegionKHR--instance ToCStruct StridedBufferRegionKHR where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p StridedBufferRegionKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (offset)-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (stride)-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (size)-    f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)-    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)-    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)-    f--instance FromCStruct StridedBufferRegionKHR where-  peekCStruct p = do-    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))-    offset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))-    stride <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))-    size <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))-    pure $ StridedBufferRegionKHR-             buffer offset stride size--instance Storable StridedBufferRegionKHR where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero StridedBufferRegionKHR where-  zero = StridedBufferRegionKHR-           zero-           zero-           zero-           zero----- | VkTraceRaysIndirectCommandKHR - Structure specifying the parameters of--- an indirect trace ray command------ = Description------ The members of 'TraceRaysIndirectCommandKHR' have the same meaning as--- the similarly named parameters of 'cmdTraceRaysKHR'.------ == Valid Usage------ = See Also------ No cross-references are available-data TraceRaysIndirectCommandKHR = TraceRaysIndirectCommandKHR-  { -- | @width@ is the width of the ray trace query dimensions.-    ---    -- @width@ /must/ be less than or equal to-    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]-    width :: Word32-  , -- | @height@ is height of the ray trace query dimensions.-    ---    -- @height@ /must/ be less than or equal to-    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]-    height :: Word32-  , -- | @depth@ is depth of the ray trace query dimensions.-    ---    -- @depth@ /must/ be less than or equal to-    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]-    depth :: Word32-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (TraceRaysIndirectCommandKHR)-#endif-deriving instance Show TraceRaysIndirectCommandKHR--instance ToCStruct TraceRaysIndirectCommandKHR where-  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p TraceRaysIndirectCommandKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (width)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (height)-    poke ((p `plusPtr` 8 :: Ptr Word32)) (depth)-    f-  cStructSize = 12-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)-    f--instance FromCStruct TraceRaysIndirectCommandKHR where-  peekCStruct p = do-    width <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))-    height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    depth <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))-    pure $ TraceRaysIndirectCommandKHR-             width height depth--instance Storable TraceRaysIndirectCommandKHR where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero TraceRaysIndirectCommandKHR where-  zero = TraceRaysIndirectCommandKHR-           zero-           zero-           zero----- | VkAccelerationStructureGeometryTrianglesDataKHR - Structure specifying a--- triangle geometry in a bottom-level acceleration structure------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'---     value------ -   @vertexData@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union------ -   @indexType@ /must/ be a valid---     'Vulkan.Core10.Enums.IndexType.IndexType' value------ -   If @indexData@ is not @0@, @indexData@ /must/ be a valid---     'DeviceOrHostAddressConstKHR' union------ -   If @transformData@ is not @0@, @transformData@ /must/ be a valid---     'DeviceOrHostAddressConstKHR' union------ = See Also------ 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Enums.Format.Format',--- 'Vulkan.Core10.Enums.IndexType.IndexType',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeometryTrianglesDataKHR-  { -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex-    -- element.-    vertexFormat :: Format-  , -- | @vertexData@ is a device or host address to memory containing vertex-    -- data for this geometry.-    vertexData :: DeviceOrHostAddressConstKHR-  , -- | @vertexStride@ is the stride in bytes between each vertex.-    vertexStride :: DeviceSize-  , -- | @indexType@ is the 'Vulkan.Core10.Enums.IndexType.IndexType' of each-    -- index element.-    indexType :: IndexType-  , -- | @indexData@ is a device or host address to memory containing index data-    -- for this geometry.-    indexData :: DeviceOrHostAddressConstKHR-  , -- | @transformData@ is a device or host address to memory containing an-    -- optional reference to a 'TransformMatrixKHR' structure defining a-    -- transformation that should be applied to vertices in this geometry.-    transformData :: DeviceOrHostAddressConstKHR-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureGeometryTrianglesDataKHR)-#endif-deriving instance Show AccelerationStructureGeometryTrianglesDataKHR--instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR where-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureGeometryTrianglesDataKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (vertexFormat)-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (vertexData) . ($ ())-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (vertexStride)-    lift $ poke ((p `plusPtr` 40 :: Ptr IndexType)) (indexType)-    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr DeviceOrHostAddressConstKHR)) (indexData) . ($ ())-    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr DeviceOrHostAddressConstKHR)) (transformData) . ($ ())-    lift $ f-  cStructSize = 64-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())-    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)-    lift $ poke ((p `plusPtr` 40 :: Ptr IndexType)) (zero)-    lift $ f--instance Zero AccelerationStructureGeometryTrianglesDataKHR where-  zero = AccelerationStructureGeometryTrianglesDataKHR-           zero-           zero-           zero-           zero-           zero-           zero----- | VkAccelerationStructureGeometryAabbsDataKHR - Structure specifying--- axis-aligned bounding box geometry in a bottom-level acceleration--- structure------ == Valid Usage (Implicit)------ = See Also------ 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data AccelerationStructureGeometryAabbsDataKHR = AccelerationStructureGeometryAabbsDataKHR-  { -- | @data@ is a device or host address to memory containing-    -- 'AabbPositionsKHR' structures containing position data for each-    -- axis-aligned bounding box in the geometry.-    ---    -- @data@ /must/ be aligned to @8@ bytes-    ---    -- @data@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union-    data' :: DeviceOrHostAddressConstKHR-  , -- | @stride@ is the stride in bytes between each entry in @data@.-    ---    -- @stride@ /must/ be a multiple of @8@-    stride :: DeviceSize-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureGeometryAabbsDataKHR)-#endif-deriving instance Show AccelerationStructureGeometryAabbsDataKHR--instance ToCStruct AccelerationStructureGeometryAabbsDataKHR where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureGeometryAabbsDataKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (data') . ($ ())-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (stride)-    lift $ f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())-    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)-    lift $ f--instance Zero AccelerationStructureGeometryAabbsDataKHR where-  zero = AccelerationStructureGeometryAabbsDataKHR-           zero-           zero----- | VkAccelerationStructureGeometryInstancesDataKHR - Structure specifying a--- geometry consisting of instances of other acceleration structures------ == Valid Usage------ -   @data@ /must/ be aligned to @16@ bytes------ -   If @arrayOfPointers@ is true, each pointer /must/ be aligned to @16@---     bytes------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @data@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union------ = See Also------ 'AccelerationStructureGeometryDataKHR',--- 'Vulkan.Core10.FundamentalTypes.Bool32', 'DeviceOrHostAddressConstKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data AccelerationStructureGeometryInstancesDataKHR = AccelerationStructureGeometryInstancesDataKHR-  { -- | @arrayOfPointers@ specifies whether @data@ is used as an array of-    -- addresses or just an array.-    arrayOfPointers :: Bool-  , -- | @data@ is either the address of an array of device or host addresses-    -- referencing individual 'AccelerationStructureInstanceKHR' structures if-    -- @arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or the-    -- address of an array of 'AccelerationStructureInstanceKHR' structures.-    data' :: DeviceOrHostAddressConstKHR-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureGeometryInstancesDataKHR)-#endif-deriving instance Show AccelerationStructureGeometryInstancesDataKHR--instance ToCStruct AccelerationStructureGeometryInstancesDataKHR where-  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureGeometryInstancesDataKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (arrayOfPointers))-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (data') . ($ ())-    lift $ f-  cStructSize = 32-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())-    lift $ f--instance Zero AccelerationStructureGeometryInstancesDataKHR where-  zero = AccelerationStructureGeometryInstancesDataKHR-           zero-           zero----- | VkAccelerationStructureGeometryKHR - Structure specifying geometries to--- be built into an acceleration structure------ == Valid Usage------ -   If @geometryType@ is 'GEOMETRY_TYPE_AABBS_KHR', the @aabbs@ member---     of @geometry@ /must/ be a valid---     'AccelerationStructureGeometryAabbsDataKHR' structure------ -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', the @triangles@---     member of @geometry@ /must/ be a valid---     'AccelerationStructureGeometryTrianglesDataKHR' structure------ -   If @geometryType@ is 'GEOMETRY_TYPE_INSTANCES_KHR', the @instances@---     member of @geometry@ /must/ be a valid---     'AccelerationStructureGeometryInstancesDataKHR' structure------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @geometryType@ /must/ be a valid 'GeometryTypeKHR' value------ -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', the @triangles@---     member of @geometry@ /must/ be a valid---     'AccelerationStructureGeometryTrianglesDataKHR' structure------ -   If @geometryType@ is 'GEOMETRY_TYPE_AABBS_KHR', the @aabbs@ member---     of @geometry@ /must/ be a valid---     'AccelerationStructureGeometryAabbsDataKHR' structure------ -   If @geometryType@ is 'GEOMETRY_TYPE_INSTANCES_KHR', the @instances@---     member of @geometry@ /must/ be a valid---     'AccelerationStructureGeometryInstancesDataKHR' structure------ -   @flags@ /must/ be a valid combination of 'GeometryFlagBitsKHR'---     values------ = See Also------ 'AccelerationStructureBuildGeometryInfoKHR',--- 'AccelerationStructureGeometryDataKHR', 'GeometryFlagsKHR',--- 'GeometryTypeKHR', 'Vulkan.Core10.Enums.StructureType.StructureType'-data AccelerationStructureGeometryKHR = AccelerationStructureGeometryKHR-  { -- | @geometryType@ describes which type of geometry this-    -- 'AccelerationStructureGeometryKHR' refers to.-    geometryType :: GeometryTypeKHR-  , -- | @geometry@ is a 'AccelerationStructureGeometryDataKHR' union describing-    -- the geometry data for the relevant geometry type.-    geometry :: AccelerationStructureGeometryDataKHR-  , -- | @flags@ is a bitmask of 'GeometryFlagBitsKHR' values describing-    -- additional properties of how the geometry should be built.-    flags :: GeometryFlagsKHR-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureGeometryKHR)-#endif-deriving instance Show AccelerationStructureGeometryKHR--instance ToCStruct AccelerationStructureGeometryKHR where-  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureGeometryKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureGeometryDataKHR)) (geometry) . ($ ())-    lift $ poke ((p `plusPtr` 88 :: Ptr GeometryFlagsKHR)) (flags)-    lift $ f-  cStructSize = 96-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureGeometryDataKHR)) (zero) . ($ ())-    lift $ f--instance Zero AccelerationStructureGeometryKHR where-  zero = AccelerationStructureGeometryKHR-           zero-           zero-           zero----- | VkAccelerationStructureBuildGeometryInfoKHR - Structure specifying the--- geometry data used to build an acceleration structure------ = Description------ Note------ Elements of @ppGeometries@ are accessed as follows, based on--- @geometryArrayOfPointers@:------ > if (geometryArrayOfPointers) {--- >     use *(ppGeometries[i]);--- > } else {--- >     use (*ppGeometries)[i];--- > }------ == Valid Usage------ -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE',---     @srcAccelerationStructure@ /must/ not be---     'Vulkan.Core10.APIConstants.NULL_HANDLE'------ -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE',---     @srcAccelerationStructure@ /must/ have been built before with---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' set in---     'AccelerationStructureBuildGeometryInfoKHR'::@flags@------ -   @scratchData@ /must/ have been created with---     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_RAY_TRACING_BIT_KHR'---     usage flag------ -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', the---     @srcAccelerationStructure@ and @dstAccelerationStructure@ objects---     /must/ either be the same object or not have any---     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @type@ /must/ be a valid 'AccelerationStructureTypeKHR' value------ -   @flags@ /must/ be a valid combination of---     'BuildAccelerationStructureFlagBitsKHR' values------ -   If @srcAccelerationStructure@ is not---     'Vulkan.Core10.APIConstants.NULL_HANDLE', @srcAccelerationStructure@---     /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ -   @dstAccelerationStructure@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ -   @scratchData@ /must/ be a valid 'DeviceOrHostAddressKHR' union------ -   Both of @dstAccelerationStructure@, and @srcAccelerationStructure@---     that are valid handles of non-ignored parameters /must/ have been---     created, allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Device'------ = See Also------ 'AccelerationStructureGeometryKHR',--- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'AccelerationStructureTypeKHR', 'Vulkan.Core10.FundamentalTypes.Bool32',--- 'BuildAccelerationStructureFlagsKHR', 'DeviceOrHostAddressKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'buildAccelerationStructureKHR',--- 'cmdBuildAccelerationStructureIndirectKHR',--- 'cmdBuildAccelerationStructureKHR'-data AccelerationStructureBuildGeometryInfoKHR (es :: [Type]) = AccelerationStructureBuildGeometryInfoKHR-  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.-    next :: Chain es-  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of-    -- acceleration structure being built.-    type' :: AccelerationStructureTypeKHR-  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'-    -- specifying additional parameters of the acceleration structure.-    flags :: BuildAccelerationStructureFlagsKHR-  , -- | @update@ specifies whether to update @dstAccelerationStructure@ with the-    -- data in @srcAccelerationStructure@ or not.-    update :: Bool-  , -- | @srcAccelerationStructure@ points to an existing acceleration structure-    -- that is to be used to update the @dst@ acceleration structure when-    -- @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE'.-    srcAccelerationStructure :: AccelerationStructureKHR-  , -- | @dstAccelerationStructure@ points to the target acceleration structure-    -- for the build.-    dstAccelerationStructure :: AccelerationStructureKHR-  , -- | @ppGeometries@ is either a pointer to an array of pointers to-    -- 'AccelerationStructureGeometryKHR' structures if-    -- @geometryArrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or a-    -- pointer to a pointer to an array of 'AccelerationStructureGeometryKHR'-    -- structures if it is 'Vulkan.Core10.FundamentalTypes.FALSE'. Each element-    -- of the array describes the data used to build each acceleration-    -- structure geometry.-    geometries :: Vector AccelerationStructureGeometryKHR-  , -- | @scratchData@ is the device or host address to memory that will be used-    -- as scratch memory for the build.-    scratchData :: DeviceOrHostAddressKHR-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureBuildGeometryInfoKHR (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (AccelerationStructureBuildGeometryInfoKHR es)--instance Extensible AccelerationStructureBuildGeometryInfoKHR where-  extensibleType = STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR-  setNext x next = x{next = next}-  getNext AccelerationStructureBuildGeometryInfoKHR{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureBuildGeometryInfoKHR e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f-    | otherwise = Nothing--instance (Extendss AccelerationStructureBuildGeometryInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureBuildGeometryInfoKHR es) where-  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureBuildGeometryInfoKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeKHR)) (type')-    lift $ poke ((p `plusPtr` 20 :: Ptr BuildAccelerationStructureFlagsKHR)) (flags)-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (update))-    lift $ poke ((p `plusPtr` 32 :: Ptr AccelerationStructureKHR)) (srcAccelerationStructure)-    lift $ poke ((p `plusPtr` 40 :: Ptr AccelerationStructureKHR)) (dstAccelerationStructure)-    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (FALSE)-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometries)) :: Word32))-    pPpGeometries' <- ContT $ allocaBytesAligned @AccelerationStructureGeometryKHR ((Data.Vector.length (geometries)) * 96) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPpGeometries' `plusPtr` (96 * (i)) :: Ptr AccelerationStructureGeometryKHR) (e) . ($ ())) (geometries)-    ppGeometries'' <- ContT $ with (pPpGeometries')-    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr AccelerationStructureGeometryKHR)))) ppGeometries''-    ContT $ pokeCStruct ((p `plusPtr` 64 :: Ptr DeviceOrHostAddressKHR)) (scratchData) . ($ ())-    lift $ f-  cStructSize = 72-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeKHR)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))-    lift $ poke ((p `plusPtr` 40 :: Ptr AccelerationStructureKHR)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 64 :: Ptr DeviceOrHostAddressKHR)) (zero) . ($ ())-    lift $ f--instance es ~ '[] => Zero (AccelerationStructureBuildGeometryInfoKHR es) where-  zero = AccelerationStructureBuildGeometryInfoKHR-           ()-           zero-           zero-           zero-           zero-           zero-           mempty-           zero----- | VkAccelerationStructureBuildOffsetInfoKHR - Structure specifying build--- offsets and counts for acceleration structure builds------ = Description------ The primitive count and primitive offset are interpreted differently--- depending on the 'GeometryTypeKHR' used:------ -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR',---     @primitiveCount@ is the number of triangles to be built, where each---     triangle is treated as 3 vertices.------     -   If the geometry uses indices, @primitiveCount@ × 3 indices are---         consumed from---         'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@,---         starting at an offset of @primitiveOffset@. The value of---         @firstVertex@ is added to the index values before fetching---         vertices.------     -   If the geometry does not use indices, @primitiveCount@ × 3---         vertices are consumed from---         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@,---         starting at an offset of @primitiveOffset@ +---         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexStride@---         × @firstVertex@.------     -   A single 'TransformMatrixKHR' structure is consumed from---         'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@,---         at an offset of @transformOffset@. This transformation matrix is---         used by all triangles.------ -   For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', @primitiveCount@---     is the number of axis-aligned bounding boxes. @primitiveCount@---     'AabbPositionsKHR' structures are consumed from---     'AccelerationStructureGeometryAabbsDataKHR'::@data@, starting at an---     offset of @primitiveOffset@.------ -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR',---     @primitiveCount@ is the number of acceleration structures.---     @primitiveCount@ 'AccelerationStructureInstanceKHR' structures are---     consumed from---     'AccelerationStructureGeometryInstancesDataKHR'::@data@, starting at---     an offset of @primitiveOffset@.------ == Valid Usage------ -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the---     geometry uses indices, the offset @primitiveOffset@ from---     'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@ /must/---     be a multiple of the element size of---     'AccelerationStructureGeometryTrianglesDataKHR'::@indexType@------ -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the---     geometry doesn’t use indices, the offset @primitiveOffset@ from---     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@ /must/---     be a multiple of the component size of---     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexFormat@------ -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', the offset---     @transformOffset@ from---     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@---     /must/ be a multiple of 16------ -   For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', the offset---     @primitiveOffset@ from---     'AccelerationStructureGeometryAabbsDataKHR'::@data@ /must/ be a---     multiple of 8------ -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR', the offset---     @primitiveOffset@ from---     'AccelerationStructureGeometryInstancesDataKHR'::@data@ /must/ be a---     multiple of 16 \/\/ TODO - Almost certainly should be more here------ = See Also------ 'buildAccelerationStructureKHR', 'cmdBuildAccelerationStructureKHR'-data AccelerationStructureBuildOffsetInfoKHR = AccelerationStructureBuildOffsetInfoKHR-  { -- | @primitiveCount@ defines the number of primitives for a corresponding-    -- acceleration structure geometry.-    primitiveCount :: Word32-  , -- | @primitiveOffset@ defines an offset in bytes into the memory where-    -- primitive data is defined.-    primitiveOffset :: Word32-  , -- | @firstVertex@ is the index of the first vertex to build from for-    -- triangle geometry.-    firstVertex :: Word32-  , -- | @transformOffset@ defines an offset in bytes into the memory where a-    -- transform matrix is defined.-    transformOffset :: Word32-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureBuildOffsetInfoKHR)-#endif-deriving instance Show AccelerationStructureBuildOffsetInfoKHR--instance ToCStruct AccelerationStructureBuildOffsetInfoKHR where-  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureBuildOffsetInfoKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (primitiveCount)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (primitiveOffset)-    poke ((p `plusPtr` 8 :: Ptr Word32)) (firstVertex)-    poke ((p `plusPtr` 12 :: Ptr Word32)) (transformOffset)-    f-  cStructSize = 16-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)-    f--instance FromCStruct AccelerationStructureBuildOffsetInfoKHR where-  peekCStruct p = do-    primitiveCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))-    primitiveOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))-    firstVertex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))-    transformOffset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))-    pure $ AccelerationStructureBuildOffsetInfoKHR-             primitiveCount primitiveOffset firstVertex transformOffset--instance Storable AccelerationStructureBuildOffsetInfoKHR where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero AccelerationStructureBuildOffsetInfoKHR where-  zero = AccelerationStructureBuildOffsetInfoKHR-           zero-           zero-           zero-           zero----- | VkAccelerationStructureCreateGeometryTypeInfoKHR - Structure specifying--- the shape of geometries that will be built into an acceleration--- structure------ = Description------ When @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR':------ -   if @indexType@ is---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then this---     structure describes a set of triangles.------ -   if @indexType@ is not---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then this---     structure describes a set of indexed triangles.------ == Valid Usage------ -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', @vertexFormat@---     /must/ support the---     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'---     in---     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@---     as returned by---     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'------ -   If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', @indexType@---     /must/ be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or---     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @geometryType@ /must/ be a valid 'GeometryTypeKHR' value------ -   @indexType@ /must/ be a valid---     'Vulkan.Core10.Enums.IndexType.IndexType' value------ -   If @vertexFormat@ is not @0@, @vertexFormat@ /must/ be a valid---     'Vulkan.Core10.Enums.Format.Format' value------ = See Also------ 'AccelerationStructureCreateInfoKHR',--- 'Vulkan.Core10.FundamentalTypes.Bool32',--- 'Vulkan.Core10.Enums.Format.Format', 'GeometryTypeKHR',--- 'Vulkan.Core10.Enums.IndexType.IndexType',--- 'Vulkan.Core10.Enums.StructureType.StructureType'-data AccelerationStructureCreateGeometryTypeInfoKHR = AccelerationStructureCreateGeometryTypeInfoKHR-  { -- | @geometryType@ is a 'GeometryTypeKHR' that describes the type of an-    -- acceleration structure geometry.-    geometryType :: GeometryTypeKHR-  , -- | @maxPrimitiveCount@ describes the maximum number of primitives that-    -- /can/ be built into an acceleration structure geometry.-    maxPrimitiveCount :: Word32-  , -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' that-    -- describes the index type used to build this geometry when @geometryType@-    -- is 'GEOMETRY_TYPE_TRIANGLES_KHR'.-    indexType :: IndexType-  , -- | @maxVertexCount@ describes the maximum vertex count that /can/ be used-    -- to build an acceleration structure geometry when @geometryType@ is-    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.-    maxVertexCount :: Word32-  , -- | @vertexFormat@ is a 'Vulkan.Core10.Enums.Format.Format' that describes-    -- the vertex format used to build this geometry when @geometryType@ is-    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.-    vertexFormat :: Format-  , -- | @allowsTransforms@ indicates whether transform data /can/ be used by-    -- this acceleration structure or not, when @geometryType@ is-    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.-    allowsTransforms :: Bool-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureCreateGeometryTypeInfoKHR)-#endif-deriving instance Show AccelerationStructureCreateGeometryTypeInfoKHR--instance ToCStruct AccelerationStructureCreateGeometryTypeInfoKHR where-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureCreateGeometryTypeInfoKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)-    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxPrimitiveCount)-    poke ((p `plusPtr` 24 :: Ptr IndexType)) (indexType)-    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxVertexCount)-    poke ((p `plusPtr` 32 :: Ptr Format)) (vertexFormat)-    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (allowsTransforms))-    f-  cStructSize = 40-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)-    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)-    poke ((p `plusPtr` 24 :: Ptr IndexType)) (zero)-    f--instance FromCStruct AccelerationStructureCreateGeometryTypeInfoKHR where-  peekCStruct p = do-    geometryType <- peek @GeometryTypeKHR ((p `plusPtr` 16 :: Ptr GeometryTypeKHR))-    maxPrimitiveCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))-    indexType <- peek @IndexType ((p `plusPtr` 24 :: Ptr IndexType))-    maxVertexCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))-    vertexFormat <- peek @Format ((p `plusPtr` 32 :: Ptr Format))-    allowsTransforms <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))-    pure $ AccelerationStructureCreateGeometryTypeInfoKHR-             geometryType maxPrimitiveCount indexType maxVertexCount vertexFormat (bool32ToBool allowsTransforms)--instance Storable AccelerationStructureCreateGeometryTypeInfoKHR where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero AccelerationStructureCreateGeometryTypeInfoKHR where-  zero = AccelerationStructureCreateGeometryTypeInfoKHR-           zero-           zero-           zero-           zero-           zero-           zero----- | VkAccelerationStructureCreateInfoKHR - Structure specifying the--- parameters of a newly created acceleration structure object------ = Description------ If @deviceAddress@ is zero, no specific address is requested.------ If @deviceAddress@ is not zero, @deviceAddress@ /must/ be an address--- retrieved from an identically created acceleration structure on the same--- implementation. The acceleration structure /must/ also be bound to an--- identically created 'Vulkan.Core10.Handles.DeviceMemory' object.------ Apps /should/ avoid creating acceleration structures with app-provided--- addresses and implementation-provided addresses in the same process, to--- reduce the likelihood of--- 'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'--- errors.------ == Valid Usage------ -   If @compactedSize@ is not @0@ then @maxGeometryCount@ /must/ be @0@------ -   If @compactedSize@ is @0@ then @maxGeometryCount@ /must/ not be @0@------ -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then---     @maxGeometryCount@ /must/ be less than or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxGeometryCount@------ -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' then the---     @maxPrimitiveCount@ member of each element of the @pGeometryInfos@---     array /must/ be less than or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxInstanceCount@------ -   The total number of triangles in all geometries /must/ be less than---     or equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxPrimitiveCount@------ -   The total number of AABBs in all geometries /must/ be less than or---     equal to---     'PhysicalDeviceRayTracingPropertiesKHR'::@maxPrimitiveCount@------ -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' and---     @compactedSize@ is @0@, @maxGeometryCount@ /must/ be @1@------ -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' and---     @compactedSize@ is @0@, the @geometryType@ member of elements of---     @pGeometryInfos@ /must/ be 'GEOMETRY_TYPE_INSTANCES_KHR'------ -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' and---     @compactedSize@ is @0@, the @geometryType@ member of elements of---     @pGeometryInfos@ /must/ not be 'GEOMETRY_TYPE_INSTANCES_KHR'------ -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then the---     @geometryType@ member of each geometry in @pGeometryInfos@ /must/ be---     the same------ -   If @flags@ has the---     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR' bit set,---     then it /must/ not have the---     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' bit set------ -   If @deviceAddress@ is not @0@,---     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingAccelerationStructureCaptureReplay@---     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR'------ -   @pNext@ /must/ be @NULL@------ -   @type@ /must/ be a valid 'AccelerationStructureTypeKHR' value------ -   @flags@ /must/ be a valid combination of---     'BuildAccelerationStructureFlagBitsKHR' values------ -   If @maxGeometryCount@ is not @0@, @pGeometryInfos@ /must/ be a valid---     pointer to an array of @maxGeometryCount@ valid---     'AccelerationStructureCreateGeometryTypeInfoKHR' structures------ = See Also------ 'AccelerationStructureCreateGeometryTypeInfoKHR',--- 'AccelerationStructureTypeKHR', 'BuildAccelerationStructureFlagsKHR',--- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',--- 'Vulkan.Core10.FundamentalTypes.DeviceSize',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'createAccelerationStructureKHR'-data AccelerationStructureCreateInfoKHR = AccelerationStructureCreateInfoKHR-  { -- | @compactedSize@ is the size from the result of-    -- 'cmdWriteAccelerationStructuresPropertiesKHR' if this acceleration-    -- structure is going to be the target of a compacting copy.-    compactedSize :: DeviceSize-  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of-    -- acceleration structure that will be created.-    type' :: AccelerationStructureTypeKHR-  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'-    -- specifying additional parameters of the acceleration structure.-    flags :: BuildAccelerationStructureFlagsKHR-  , -- | @pGeometryInfos@ is an array of @maxGeometryCount@-    -- 'AccelerationStructureCreateGeometryTypeInfoKHR' structures, which-    -- describe the maximum size and format of the data that will be built into-    -- the acceleration structure.-    geometryInfos :: Vector AccelerationStructureCreateGeometryTypeInfoKHR-  , -- | @deviceAddress@ is the device address requested for the acceleration-    -- structure if the-    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-ascapturereplay rayTracingAccelerationStructureCaptureReplay>-    -- feature is being used.-    deviceAddress :: DeviceAddress-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureCreateInfoKHR)-#endif-deriving instance Show AccelerationStructureCreateInfoKHR--instance ToCStruct AccelerationStructureCreateInfoKHR where-  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureCreateInfoKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (compactedSize)-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR)) (type')-    lift $ poke ((p `plusPtr` 28 :: Ptr BuildAccelerationStructureFlagsKHR)) (flags)-    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometryInfos)) :: Word32))-    pPGeometryInfos' <- ContT $ allocaBytesAligned @AccelerationStructureCreateGeometryTypeInfoKHR ((Data.Vector.length (geometryInfos)) * 40) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometryInfos' `plusPtr` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR) (e) . ($ ())) (geometryInfos)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR))) (pPGeometryInfos')-    lift $ poke ((p `plusPtr` 48 :: Ptr DeviceAddress)) (deviceAddress)-    lift $ f-  cStructSize = 56-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR)) (zero)-    pPGeometryInfos' <- ContT $ allocaBytesAligned @AccelerationStructureCreateGeometryTypeInfoKHR ((Data.Vector.length (mempty)) * 40) 8-    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometryInfos' `plusPtr` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR) (e) . ($ ())) (mempty)-    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR))) (pPGeometryInfos')-    lift $ f--instance FromCStruct AccelerationStructureCreateInfoKHR where-  peekCStruct p = do-    compactedSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))-    type' <- peek @AccelerationStructureTypeKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR))-    flags <- peek @BuildAccelerationStructureFlagsKHR ((p `plusPtr` 28 :: Ptr BuildAccelerationStructureFlagsKHR))-    maxGeometryCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))-    pGeometryInfos <- peek @(Ptr AccelerationStructureCreateGeometryTypeInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR)))-    pGeometryInfos' <- generateM (fromIntegral maxGeometryCount) (\i -> peekCStruct @AccelerationStructureCreateGeometryTypeInfoKHR ((pGeometryInfos `advancePtrBytes` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR)))-    deviceAddress <- peek @DeviceAddress ((p `plusPtr` 48 :: Ptr DeviceAddress))-    pure $ AccelerationStructureCreateInfoKHR-             compactedSize type' flags pGeometryInfos' deviceAddress--instance Zero AccelerationStructureCreateInfoKHR where-  zero = AccelerationStructureCreateInfoKHR-           zero-           zero-           zero-           mempty-           zero----- | VkAabbPositionsKHR - Structure specifying two opposing corners of an--- axis-aligned bounding box------ == Valid Usage------ = See Also------ No cross-references are available-data AabbPositionsKHR = AabbPositionsKHR-  { -- | @minX@ is the x position of one opposing corner of a bounding box.-    ---    -- @minX@ /must/ be less than or equal to @maxX@-    minX :: Float-  , -- | @minY@ is the y position of one opposing corner of a bounding box.-    ---    -- @minY@ /must/ be less than or equal to @maxY@-    minY :: Float-  , -- | @minZ@ is the z position of one opposing corner of a bounding box.-    ---    -- @minZ@ /must/ be less than or equal to @maxZ@-    minZ :: Float-  , -- | @maxX@ is the x position of the other opposing corner of a bounding box.-    maxX :: Float-  , -- | @maxY@ is the y position of the other opposing corner of a bounding box.-    maxY :: Float-  , -- | @maxZ@ is the z position of the other opposing corner of a bounding box.-    maxZ :: Float-  }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AabbPositionsKHR)-#endif-deriving instance Show AabbPositionsKHR--instance ToCStruct AabbPositionsKHR where-  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AabbPositionsKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (minX))-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (minY))-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (minZ))-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (maxX))-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (maxY))-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxZ))-    f-  cStructSize = 24-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))-    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))-    f--instance FromCStruct AabbPositionsKHR where-  peekCStruct p = do-    minX <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))-    minY <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))-    minZ <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))-    maxX <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))-    maxY <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))-    maxZ <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))-    pure $ AabbPositionsKHR-             ((\(CFloat a) -> a) minX) ((\(CFloat a) -> a) minY) ((\(CFloat a) -> a) minZ) ((\(CFloat a) -> a) maxX) ((\(CFloat a) -> a) maxY) ((\(CFloat a) -> a) maxZ)--instance Storable AabbPositionsKHR where-  sizeOf ~_ = 24-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero AabbPositionsKHR where-  zero = AabbPositionsKHR-           zero-           zero-           zero-           zero-           zero-           zero----- | VkTransformMatrixKHR - Structure specifying a 3x4 affine transformation--- matrix------ = See Also------ 'AccelerationStructureInstanceKHR'-data TransformMatrixKHR = TransformMatrixKHR-  { -- | @matrix@ is a 3x4 row-major affine transformation matrix.-    matrix :: ((Float, Float, Float, Float), (Float, Float, Float, Float), (Float, Float, Float, Float)) }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (TransformMatrixKHR)-#endif-deriving instance Show TransformMatrixKHR--instance ToCStruct TransformMatrixKHR where-  withCStruct x f = allocaBytesAligned 48 4 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p TransformMatrixKHR{..} f = do-    let pMatrix' = lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))-    case (matrix) of-      (e0, e1, e2) -> do-        let pMatrix0 = lowerArrayPtr (pMatrix' :: Ptr (FixedArray 4 CFloat))-        case (e0) of-          (e0', e1', e2', e3) -> do-            poke (pMatrix0 :: Ptr CFloat) (CFloat (e0'))-            poke (pMatrix0 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))-            poke (pMatrix0 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))-            poke (pMatrix0 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-        let pMatrix1 = lowerArrayPtr (pMatrix' `plusPtr` 16 :: Ptr (FixedArray 4 CFloat))-        case (e1) of-          (e0', e1', e2', e3) -> do-            poke (pMatrix1 :: Ptr CFloat) (CFloat (e0'))-            poke (pMatrix1 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))-            poke (pMatrix1 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))-            poke (pMatrix1 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-        let pMatrix2 = lowerArrayPtr (pMatrix' `plusPtr` 32 :: Ptr (FixedArray 4 CFloat))-        case (e2) of-          (e0', e1', e2', e3) -> do-            poke (pMatrix2 :: Ptr CFloat) (CFloat (e0'))-            poke (pMatrix2 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))-            poke (pMatrix2 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))-            poke (pMatrix2 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-        pure $ ()-    f-  cStructSize = 48-  cStructAlignment = 4-  pokeZeroCStruct p f = do-    let pMatrix' = lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))-    case (((zero, zero, zero, zero), (zero, zero, zero, zero), (zero, zero, zero, zero))) of-      (e0, e1, e2) -> do-        let pMatrix0 = lowerArrayPtr (pMatrix' :: Ptr (FixedArray 4 CFloat))-        case (e0) of-          (e0', e1', e2', e3) -> do-            poke (pMatrix0 :: Ptr CFloat) (CFloat (e0'))-            poke (pMatrix0 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))-            poke (pMatrix0 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))-            poke (pMatrix0 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-        let pMatrix1 = lowerArrayPtr (pMatrix' `plusPtr` 16 :: Ptr (FixedArray 4 CFloat))-        case (e1) of-          (e0', e1', e2', e3) -> do-            poke (pMatrix1 :: Ptr CFloat) (CFloat (e0'))-            poke (pMatrix1 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))-            poke (pMatrix1 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))-            poke (pMatrix1 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-        let pMatrix2 = lowerArrayPtr (pMatrix' `plusPtr` 32 :: Ptr (FixedArray 4 CFloat))-        case (e2) of-          (e0', e1', e2', e3) -> do-            poke (pMatrix2 :: Ptr CFloat) (CFloat (e0'))-            poke (pMatrix2 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))-            poke (pMatrix2 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))-            poke (pMatrix2 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))-        pure $ ()-    f--instance FromCStruct TransformMatrixKHR where-  peekCStruct p = do-    let pmatrix = lowerArrayPtr @(FixedArray 4 CFloat) ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))-    let pmatrix0 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 0 :: Ptr (FixedArray 4 CFloat)))-    matrix00 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 0 :: Ptr CFloat))-    matrix01 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 4 :: Ptr CFloat))-    matrix02 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 8 :: Ptr CFloat))-    matrix03 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 12 :: Ptr CFloat))-    let pmatrix1 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 16 :: Ptr (FixedArray 4 CFloat)))-    matrix10 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 0 :: Ptr CFloat))-    matrix11 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 4 :: Ptr CFloat))-    matrix12 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 8 :: Ptr CFloat))-    matrix13 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 12 :: Ptr CFloat))-    let pmatrix2 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 32 :: Ptr (FixedArray 4 CFloat)))-    matrix20 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 0 :: Ptr CFloat))-    matrix21 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 4 :: Ptr CFloat))-    matrix22 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 8 :: Ptr CFloat))-    matrix23 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 12 :: Ptr CFloat))-    pure $ TransformMatrixKHR-             ((((((\(CFloat a) -> a) matrix00), ((\(CFloat a) -> a) matrix01), ((\(CFloat a) -> a) matrix02), ((\(CFloat a) -> a) matrix03))), ((((\(CFloat a) -> a) matrix10), ((\(CFloat a) -> a) matrix11), ((\(CFloat a) -> a) matrix12), ((\(CFloat a) -> a) matrix13))), ((((\(CFloat a) -> a) matrix20), ((\(CFloat a) -> a) matrix21), ((\(CFloat a) -> a) matrix22), ((\(CFloat a) -> a) matrix23)))))--instance Storable TransformMatrixKHR where-  sizeOf ~_ = 48-  alignment ~_ = 4-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero TransformMatrixKHR where-  zero = TransformMatrixKHR-           ((zero, zero, zero, zero), (zero, zero, zero, zero), (zero, zero, zero, zero))----- | VkAccelerationStructureInstanceKHR - Structure specifying a single--- acceleration structure instance for building into an acceleration--- structure geometry------ = Description------ The C language spec does not define the ordering of bit-fields, but in--- practice, this struct produces the correct layout with existing--- compilers. The intended bit pattern is for the following:------ If a compiler produces code that diverges from that pattern,--- applications /must/ employ another method to set values according to the--- correct bit pattern.------ == Valid Usage (Implicit)------ = See Also------ 'GeometryInstanceFlagsKHR', 'TransformMatrixKHR'-data AccelerationStructureInstanceKHR = AccelerationStructureInstanceKHR-  { -- | @transform@ is a 'TransformMatrixKHR' structure describing a-    -- transformation to be applied to the acceleration structure.-    transform :: TransformMatrixKHR-  , -- | @instanceCustomIndex@ is a 24-bit user-specified index value accessible-    -- to ray shaders in the @InstanceCustomIndexKHR@ built-in.-    ---    -- @instanceCustomIndex@ and @mask@ occupy the same memory as if a single-    -- @int32_t@ was specified in their place-    ---    -- -   @instanceCustomIndex@ occupies the 24 least significant bits of that-    --     memory-    ---    -- -   @mask@ occupies the 8 most significant bits of that memory-    instanceCustomIndex :: Word32-  , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/-    -- only be hit if @rayMask & instance.mask != 0@-    mask :: Word32-  , -- | @instanceShaderBindingTableRecordOffset@ is a 24-bit offset used in-    -- calculating the hit shader binding table index.-    ---    -- @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same-    -- memory as if a single @int32_t@ was specified in their place-    ---    -- -   @instanceShaderBindingTableRecordOffset@ occupies the 24 least-    --     significant bits of that memory-    ---    -- -   @flags@ occupies the 8 most significant bits of that memory-    instanceShaderBindingTableRecordOffset :: Word32-  , -- | @flags@ is an 8-bit mask of 'GeometryInstanceFlagBitsKHR' values to-    -- apply to this instance.-    ---    -- @flags@ /must/ be a valid combination of 'GeometryInstanceFlagBitsKHR'-    -- values-    flags :: GeometryInstanceFlagsKHR-  , -- | @accelerationStructureReference@ is either:-    ---    -- -   a device address containing the value obtained from-    --     'getAccelerationStructureDeviceAddressKHR' or-    --     'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'-    --     (used by device operations which reference acceleration structures)-    --     or,-    ---    -- -   a 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object (used-    --     by host operations which reference acceleration structures).-    accelerationStructureReference :: Word64-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureInstanceKHR)-#endif-deriving instance Show AccelerationStructureInstanceKHR--instance ToCStruct AccelerationStructureInstanceKHR where-  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureInstanceKHR{..} f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (transform) . ($ ())-    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (((coerce @_ @Word32 (mask)) `shiftL` 24) .|. (instanceCustomIndex))-    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (((coerce @_ @Word32 (flags)) `shiftL` 24) .|. (instanceShaderBindingTableRecordOffset))-    lift $ poke ((p `plusPtr` 56 :: Ptr Word64)) (accelerationStructureReference)-    lift $ f-  cStructSize = 64-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (zero) . ($ ())-    lift $ poke ((p `plusPtr` 56 :: Ptr Word64)) (zero)-    lift $ f--instance FromCStruct AccelerationStructureInstanceKHR where-  peekCStruct p = do-    transform <- peekCStruct @TransformMatrixKHR ((p `plusPtr` 0 :: Ptr TransformMatrixKHR))-    instanceCustomIndex <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))-    let instanceCustomIndex' = ((instanceCustomIndex .&. coerce @Word32 0xffffff))-    mask <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))-    let mask' = ((((mask `shiftR` 24)) .&. coerce @Word32 0xff))-    instanceShaderBindingTableRecordOffset <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))-    let instanceShaderBindingTableRecordOffset' = ((instanceShaderBindingTableRecordOffset .&. coerce @Word32 0xffffff))-    flags <- peek @GeometryInstanceFlagsKHR ((p `plusPtr` 52 :: Ptr GeometryInstanceFlagsKHR))-    let flags' = ((((flags `shiftR` 24)) .&. coerce @Word32 0xff))-    accelerationStructureReference <- peek @Word64 ((p `plusPtr` 56 :: Ptr Word64))-    pure $ AccelerationStructureInstanceKHR-             transform instanceCustomIndex' mask' instanceShaderBindingTableRecordOffset' flags' accelerationStructureReference--instance Zero AccelerationStructureInstanceKHR where-  zero = AccelerationStructureInstanceKHR-           zero-           zero-           zero-           zero-           zero-           zero----- | VkAccelerationStructureDeviceAddressInfoKHR - Structure specifying the--- acceleration structure to query an address for------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'getAccelerationStructureDeviceAddressKHR'-data AccelerationStructureDeviceAddressInfoKHR = AccelerationStructureDeviceAddressInfoKHR-  { -- | @accelerationStructure@ specifies the acceleration structure whose-    -- address is being queried.-    ---    -- @accelerationStructure@ /must/ be a valid-    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle-    accelerationStructure :: AccelerationStructureKHR }-  deriving (Typeable, Eq)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureDeviceAddressInfoKHR)-#endif-deriving instance Show AccelerationStructureDeviceAddressInfoKHR--instance ToCStruct AccelerationStructureDeviceAddressInfoKHR where-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureDeviceAddressInfoKHR{..} f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (accelerationStructure)-    f-  cStructSize = 24-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)-    f--instance FromCStruct AccelerationStructureDeviceAddressInfoKHR where-  peekCStruct p = do-    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))-    pure $ AccelerationStructureDeviceAddressInfoKHR-             accelerationStructure--instance Storable AccelerationStructureDeviceAddressInfoKHR where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek = peekCStruct-  poke ptr poked = pokeCStruct ptr poked (pure ())--instance Zero AccelerationStructureDeviceAddressInfoKHR where-  zero = AccelerationStructureDeviceAddressInfoKHR-           zero----- | VkAccelerationStructureVersionKHR - Acceleration structure version--- information------ == Valid Usage (Implicit)------ = See Also------ 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'getDeviceAccelerationStructureCompatibilityKHR'-data AccelerationStructureVersionKHR = AccelerationStructureVersionKHR-  { -- | @versionData@ is a pointer to the version header as defined in-    -- 'CopyAccelerationStructureModeKHR'-    ---    -- @versionData@ /must/ be a valid pointer to an array of @2@*VK_UUID_SIZE-    -- @uint8_t@ values-    versionData :: ByteString }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (AccelerationStructureVersionKHR)-#endif-deriving instance Show AccelerationStructureVersionKHR--instance ToCStruct AccelerationStructureVersionKHR where-  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p AccelerationStructureVersionKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    lift $ unless (Data.ByteString.length (versionData) == 2 * UUID_SIZE) $-      throwIO $ IOError Nothing InvalidArgument "" "AccelerationStructureVersionKHR::versionData must be 2*VK_UUID_SIZE bytes" Nothing Nothing-    versionData'' <- fmap (castPtr @CChar @Word8) . ContT $ unsafeUseAsCString (versionData)-    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr Word8))) versionData''-    lift $ f-  cStructSize = 24-  cStructAlignment = 8-  pokeZeroCStruct p f = do-    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)-    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)-    f--instance FromCStruct AccelerationStructureVersionKHR where-  peekCStruct p = do-    versionData <- peek @(Ptr Word8) ((p `plusPtr` 16 :: Ptr (Ptr Word8)))-    versionData' <- packCStringLen (castPtr @Word8 @CChar versionData, 2 * UUID_SIZE)-    pure $ AccelerationStructureVersionKHR-             versionData'--instance Zero AccelerationStructureVersionKHR where-  zero = AccelerationStructureVersionKHR-           mempty----- | VkCopyAccelerationStructureInfoKHR - Parameters for copying an--- acceleration structure------ == Valid Usage------ -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' or---     'COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR'------ -   @src@ /must/ have been built with---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if @mode@ is---     'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @src@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ -   @dst@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value------ -   Both of @dst@, and @src@ /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Device'------ = See Also------ 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'CopyAccelerationStructureModeKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'cmdCopyAccelerationStructureKHR', 'copyAccelerationStructureKHR'-data CopyAccelerationStructureInfoKHR (es :: [Type]) = CopyAccelerationStructureInfoKHR-  { -- No documentation found for Nested "VkCopyAccelerationStructureInfoKHR" "pNext"-    next :: Chain es-  , -- | @src@ is the source acceleration structure for the copy.-    src :: AccelerationStructureKHR-  , -- | @dst@ is the target acceleration structure for the copy.-    dst :: AccelerationStructureKHR-  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies-    -- additional operations to perform during the copy.-    mode :: CopyAccelerationStructureModeKHR-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (CopyAccelerationStructureInfoKHR (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (CopyAccelerationStructureInfoKHR es)--instance Extensible CopyAccelerationStructureInfoKHR where-  extensibleType = STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR-  setNext x next = x{next = next}-  getNext CopyAccelerationStructureInfoKHR{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyAccelerationStructureInfoKHR e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f-    | otherwise = Nothing--instance (Extendss CopyAccelerationStructureInfoKHR es, PokeChain es) => ToCStruct (CopyAccelerationStructureInfoKHR es) where-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p CopyAccelerationStructureInfoKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (src)-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (dst)-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)-    lift $ f-  cStructSize = 40-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)-    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)-    lift $ f--instance (Extendss CopyAccelerationStructureInfoKHR es, PeekChain es) => FromCStruct (CopyAccelerationStructureInfoKHR es) where-  peekCStruct p = do-    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))-    next <- peekChain (castPtr pNext)-    src <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))-    dst <- peek @AccelerationStructureKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR))-    mode <- peek @CopyAccelerationStructureModeKHR ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR))-    pure $ CopyAccelerationStructureInfoKHR-             next src dst mode--instance es ~ '[] => Zero (CopyAccelerationStructureInfoKHR es) where-  zero = CopyAccelerationStructureInfoKHR-           ()-           zero-           zero-           zero----- | VkCopyAccelerationStructureToMemoryInfoKHR - Parameters for serializing--- an acceleration structure------ == Valid Usage------ -   The memory pointed to by @dst@ /must/ be at least as large as the---     serialization size of @src@, as reported by---     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'------ -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @src@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ -   @dst@ /must/ be a valid 'DeviceOrHostAddressKHR' union------ -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value------ = See Also------ 'Vulkan.Extensions.Handles.AccelerationStructureKHR',--- 'CopyAccelerationStructureModeKHR', 'DeviceOrHostAddressKHR',--- 'Vulkan.Core10.Enums.StructureType.StructureType',--- 'cmdCopyAccelerationStructureToMemoryKHR',--- 'copyAccelerationStructureToMemoryKHR'-data CopyAccelerationStructureToMemoryInfoKHR (es :: [Type]) = CopyAccelerationStructureToMemoryInfoKHR-  { -- No documentation found for Nested "VkCopyAccelerationStructureToMemoryInfoKHR" "pNext"-    next :: Chain es-  , -- | @src@ is the source acceleration structure for the copy-    src :: AccelerationStructureKHR-  , -- | @dst@ is the device or host address to memory which is the target for-    -- the copy-    dst :: DeviceOrHostAddressKHR-  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies-    -- additional operations to perform during the copy.-    mode :: CopyAccelerationStructureModeKHR-  }-  deriving (Typeable)-#if defined(GENERIC_INSTANCES)-deriving instance Generic (CopyAccelerationStructureToMemoryInfoKHR (es :: [Type]))-#endif-deriving instance Show (Chain es) => Show (CopyAccelerationStructureToMemoryInfoKHR es)--instance Extensible CopyAccelerationStructureToMemoryInfoKHR where-  extensibleType = STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR-  setNext x next = x{next = next}-  getNext CopyAccelerationStructureToMemoryInfoKHR{..} = next-  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyAccelerationStructureToMemoryInfoKHR e => b) -> Maybe b-  extends _ f-    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f-    | otherwise = Nothing--instance (Extendss CopyAccelerationStructureToMemoryInfoKHR es, PokeChain es) => ToCStruct (CopyAccelerationStructureToMemoryInfoKHR es) where-  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)-  pokeCStruct p CopyAccelerationStructureToMemoryInfoKHR{..} f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)-    pNext'' <- fmap castPtr . ContT $ withChain (next)-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (src)-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressKHR)) (dst) . ($ ())-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)-    lift $ f-  cStructSize = 40-  cStructAlignment = 8-  pokeZeroCStruct p f = evalContT $ do-    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)-    pNext' <- fmap castPtr . ContT $ withZeroChain @es-    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'-    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)-    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressKHR)) (zero) . ($ ())-    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)-    lift $ f--instance es ~ '[] => Zero (CopyAccelerationStructureToMemoryInfoKHR es) where-  zero = CopyAccelerationStructureToMemoryInfoKHR-           ()-           zero-           zero-           zero----- | VkCopyMemoryToAccelerationStructureInfoKHR - Parameters for--- deserializing an acceleration structure------ == Valid Usage------ -   @mode@ /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'------ -   The data in @pInfo->src@ /must/ have a format compatible with the---     destination physical device as returned by---     'getDeviceAccelerationStructureCompatibilityKHR'------ == Valid Usage (Implicit)------ -   @sType@ /must/ be---     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR'------ -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of---     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'------ -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique------ -   @src@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union------ -   @dst@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle------ -   @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value+-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02442#+--     All submitted commands that refer to @accelerationStructure@ /must/+--     have completed execution+--+-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02443#+--     If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+--     provided when @accelerationStructure@ was created, a compatible set+--     of callbacks /must/ be provided here+--+-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-02444#+--     If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+--     provided when @accelerationStructure@ was created, @pAllocator@+--     /must/ be @NULL@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkDestroyAccelerationStructureKHR-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-parameter#+--     If @accelerationStructure@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @accelerationStructure@+--     /must/ be a valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+--+-- -   #VUID-vkDestroyAccelerationStructureKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure+--+-- -   #VUID-vkDestroyAccelerationStructureKHR-accelerationStructure-parent#+--     If @accelerationStructure@ is a valid handle, it /must/ have been+--     created, allocated, or retrieved from @device@+--+-- == Host Synchronization+--+-- -   Host access to @accelerationStructure@ /must/ be externally+--     synchronized+--+-- = See Also+--+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',+-- 'Vulkan.Core10.Handles.Device'+destroyAccelerationStructureKHR :: forall io+                                 . (MonadIO io)+                                => -- | @device@ is the logical device that destroys the buffer.+                                   Device+                                -> -- | @accelerationStructure@ is the acceleration structure to destroy.+                                   AccelerationStructureKHR+                                -> -- | @pAllocator@ controls host memory allocation as described in the+                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>+                                   -- chapter.+                                   ("allocator" ::: Maybe AllocationCallbacks)+                                -> io ()+destroyAccelerationStructureKHR device accelerationStructure allocator = liftIO . evalContT $ do+  let vkDestroyAccelerationStructureKHRPtr = pVkDestroyAccelerationStructureKHR (deviceCmds (device :: Device))+  lift $ unless (vkDestroyAccelerationStructureKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkDestroyAccelerationStructureKHR is null" Nothing Nothing+  let vkDestroyAccelerationStructureKHR' = mkVkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHRPtr+  pAllocator <- case (allocator) of+    Nothing -> pure nullPtr+    Just j -> ContT $ withCStruct (j)+  lift $ vkDestroyAccelerationStructureKHR' (deviceHandle (device)) (accelerationStructure) pAllocator+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetAccelerationStructureMemoryRequirementsKHR+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoKHR -> Ptr (SomeStruct MemoryRequirements2) -> IO ()) -> Ptr Device_T -> Ptr AccelerationStructureMemoryRequirementsInfoKHR -> Ptr (SomeStruct MemoryRequirements2) -> IO ()++-- | vkGetAccelerationStructureMemoryRequirementsKHR - Get acceleration+-- structure memory requirements+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'AccelerationStructureMemoryRequirementsInfoKHR',+-- 'Vulkan.Core10.Handles.Device',+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'+getAccelerationStructureMemoryRequirementsKHR :: forall a io+                                               . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io)+                                              => -- | @device@ is the logical device on which the acceleration structure was+                                                 -- created.+                                                 --+                                                 -- #VUID-vkGetAccelerationStructureMemoryRequirementsKHR-device-parameter#+                                                 -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                                 Device+                                              -> -- | @pInfo@ specifies the acceleration structure to get memory requirements+                                                 -- for.+                                                 --+                                                 -- #VUID-vkGetAccelerationStructureMemoryRequirementsKHR-pInfo-parameter#+                                                 -- @pInfo@ /must/ be a valid pointer to a valid+                                                 -- 'AccelerationStructureMemoryRequirementsInfoKHR' structure+                                                 AccelerationStructureMemoryRequirementsInfoKHR+                                              -> io (MemoryRequirements2 a)+getAccelerationStructureMemoryRequirementsKHR device info = liftIO . evalContT $ do+  let vkGetAccelerationStructureMemoryRequirementsKHRPtr = pVkGetAccelerationStructureMemoryRequirementsKHR (deviceCmds (device :: Device))+  lift $ unless (vkGetAccelerationStructureMemoryRequirementsKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureMemoryRequirementsKHR is null" Nothing Nothing+  let vkGetAccelerationStructureMemoryRequirementsKHR' = mkVkGetAccelerationStructureMemoryRequirementsKHR vkGetAccelerationStructureMemoryRequirementsKHRPtr+  pInfo <- ContT $ withCStruct (info)+  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))+  lift $ vkGetAccelerationStructureMemoryRequirementsKHR' (deviceHandle (device)) pInfo (forgetExtensions (pPMemoryRequirements))+  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements+  pure $ (pMemoryRequirements)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkBindAccelerationStructureMemoryKHR+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr BindAccelerationStructureMemoryInfoKHR -> IO Result) -> Ptr Device_T -> Word32 -> Ptr BindAccelerationStructureMemoryInfoKHR -> IO Result++-- | vkBindAccelerationStructureMemoryKHR - Bind acceleration structure+-- memory+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+-- = See Also+--+-- 'BindAccelerationStructureMemoryInfoKHR', 'Vulkan.Core10.Handles.Device'+bindAccelerationStructureMemoryKHR :: forall io+                                    . (MonadIO io)+                                   => -- | @device@ is the logical device that owns the acceleration structures and+                                      -- memory.+                                      --+                                      -- #VUID-vkBindAccelerationStructureMemoryKHR-device-parameter# @device@+                                      -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                      Device+                                   -> -- | @pBindInfos@ is a pointer to an array of+                                      -- 'BindAccelerationStructureMemoryInfoKHR' structures describing+                                      -- acceleration structures and memory to bind.+                                      --+                                      -- #VUID-vkBindAccelerationStructureMemoryKHR-pBindInfos-parameter#+                                      -- @pBindInfos@ /must/ be a valid pointer to an array of @bindInfoCount@+                                      -- valid 'BindAccelerationStructureMemoryInfoKHR' structures+                                      ("bindInfos" ::: Vector BindAccelerationStructureMemoryInfoKHR)+                                   -> io ()+bindAccelerationStructureMemoryKHR device bindInfos = liftIO . evalContT $ do+  let vkBindAccelerationStructureMemoryKHRPtr = pVkBindAccelerationStructureMemoryKHR (deviceCmds (device :: Device))+  lift $ unless (vkBindAccelerationStructureMemoryKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBindAccelerationStructureMemoryKHR is null" Nothing Nothing+  let vkBindAccelerationStructureMemoryKHR' = mkVkBindAccelerationStructureMemoryKHR vkBindAccelerationStructureMemoryKHRPtr+  pPBindInfos <- ContT $ allocaBytesAligned @BindAccelerationStructureMemoryInfoKHR ((Data.Vector.length (bindInfos)) * 56) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPBindInfos `plusPtr` (56 * (i)) :: Ptr BindAccelerationStructureMemoryInfoKHR) (e) . ($ ())) (bindInfos)+  r <- lift $ vkBindAccelerationStructureMemoryKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32)) (pPBindInfos)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyAccelerationStructureKHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct CopyAccelerationStructureInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct CopyAccelerationStructureInfoKHR) -> IO ()++-- | vkCmdCopyAccelerationStructureKHR - Copy an acceleration structure+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyAccelerationStructureKHR-None-03556# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to device memory+--+-- -   #VUID-vkCmdCopyAccelerationStructureKHR-pNext-03557# The+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--     structure /must/ not be included in the @pNext@ chain of the+--     'CopyAccelerationStructureInfoKHR' structure+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyAccelerationStructureKHR-pInfo-parameter# @pInfo@+--     /must/ be a valid pointer to a valid+--     'CopyAccelerationStructureInfoKHR' structure+--+-- -   #VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyAccelerationStructureKHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdCopyAccelerationStructureKHR-renderpass# This command+--     /must/ only be called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'CopyAccelerationStructureInfoKHR'+cmdCopyAccelerationStructureKHR :: forall a io+                                 . (Extendss CopyAccelerationStructureInfoKHR a, PokeChain a, MonadIO io)+                                => -- | @commandBuffer@ is the command buffer into which the command will be+                                   -- recorded.+                                   CommandBuffer+                                -> -- | @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR' structure+                                   -- defining the copy operation.+                                   (CopyAccelerationStructureInfoKHR a)+                                -> io ()+cmdCopyAccelerationStructureKHR commandBuffer info = liftIO . evalContT $ do+  let vkCmdCopyAccelerationStructureKHRPtr = pVkCmdCopyAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyAccelerationStructureKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyAccelerationStructureKHR is null" Nothing Nothing+  let vkCmdCopyAccelerationStructureKHR' = mkVkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHRPtr+  pInfo <- ContT $ withCStruct (info)+  lift $ vkCmdCopyAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pInfo)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCopyAccelerationStructureKHR+  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct CopyAccelerationStructureInfoKHR) -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct CopyAccelerationStructureInfoKHR) -> IO Result++-- | vkCopyAccelerationStructureKHR - Copy an acceleration structure on the+-- host+--+-- = Parameters+--+-- This command fulfills the same task as 'cmdCopyAccelerationStructureKHR'+-- but executed by the host.+--+-- = Description+--+-- -   @device@ is the device which owns the acceleration structures.+--+-- -   @pInfo@ is a pointer to a 'CopyAccelerationStructureInfoKHR'+--     structure defining the copy operation.+--+-- If the+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+-- structure is included in the @pNext@ chain of the+-- 'CopyAccelerationStructureInfoKHR' structure, the operation of this+-- command is /deferred/, as defined in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>+-- chapter.+--+-- == Valid Usage+--+-- -   #VUID-vkCopyAccelerationStructureKHR-None-03440# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to host-visible memory+--+-- -   #VUID-vkCopyAccelerationStructureKHR-rayTracingHostAccelerationStructureCommands-03441#+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCopyAccelerationStructureKHR-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkCopyAccelerationStructureKHR-pInfo-parameter# @pInfo@ /must/+--     be a valid pointer to a valid 'CopyAccelerationStructureInfoKHR'+--     structure+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+-- = See Also+--+-- 'CopyAccelerationStructureInfoKHR', 'Vulkan.Core10.Handles.Device'+copyAccelerationStructureKHR :: forall a io+                              . (Extendss CopyAccelerationStructureInfoKHR a, PokeChain a, MonadIO io)+                             => -- No documentation found for Nested "vkCopyAccelerationStructureKHR" "device"+                                Device+                             -> -- No documentation found for Nested "vkCopyAccelerationStructureKHR" "pInfo"+                                (CopyAccelerationStructureInfoKHR a)+                             -> io (Result)+copyAccelerationStructureKHR device info = liftIO . evalContT $ do+  let vkCopyAccelerationStructureKHRPtr = pVkCopyAccelerationStructureKHR (deviceCmds (device :: Device))+  lift $ unless (vkCopyAccelerationStructureKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyAccelerationStructureKHR is null" Nothing Nothing+  let vkCopyAccelerationStructureKHR' = mkVkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHRPtr+  pInfo <- ContT $ withCStruct (info)+  r <- lift $ vkCopyAccelerationStructureKHR' (deviceHandle (device)) (forgetExtensions pInfo)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pure $ (r)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyAccelerationStructureToMemoryKHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct CopyAccelerationStructureToMemoryInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct CopyAccelerationStructureToMemoryInfoKHR) -> IO ()++-- | vkCmdCopyAccelerationStructureToMemoryKHR - Copy an acceleration+-- structure to device memory+--+-- = Parameters+--+-- This command produces the same results as+-- 'copyAccelerationStructureToMemoryKHR', but writes its result to a+-- device address, and is executed on the device rather than the host. The+-- output /may/ not necessarily be bit-for-bit identical, but it can be+-- equally used by either 'cmdCopyMemoryToAccelerationStructureKHR' or+-- 'copyMemoryToAccelerationStructureKHR'.+--+-- = Description+--+-- -   @commandBuffer@ is the command buffer into which the command will be+--     recorded.+--+-- -   @pInfo@ is an a pointer to a+--     'CopyAccelerationStructureToMemoryInfoKHR' structure defining the+--     copy operation.+--+-- The defined header structure for the serialized data consists of:+--+-- -   'Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data matching+--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory_capabilities.PhysicalDeviceIDProperties'::@driverUUID@+--+-- -   'Vulkan.Core10.APIConstants.UUID_SIZE' bytes of data identifying the+--     compatibility for comparison using+--     'getDeviceAccelerationStructureCompatibilityKHR'+--+-- -   A 64-bit integer of the total size matching the value queried using+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'+--+-- -   A 64-bit integer of the deserialized size to be passed in to+--     'AccelerationStructureCreateInfoKHR'::@compactedSize@+--+-- -   A 64-bit integer of the count of the number of acceleration+--     structure handles following. This will be zero for a bottom-level+--     acceleration structure.+--+-- The corresponding handles matching the values returned by+-- 'getAccelerationStructureDeviceAddressKHR' or+-- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'+-- are tightly packed in the buffer following the count. The application is+-- expected to store a mapping between those handles and the original+-- application-generated bottom-level acceleration structures to provide+-- when deserializing.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-None-04048# All+--     'DeviceOrHostAddressConstKHR' referenced by this command /must/+--     contain valid device addresses for a buffer bound to device memory.+--     If the buffer is non-sparse then it /must/ be bound completely and+--     contiguously to a single VkDeviceMemory object+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-None-03559# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to device memory+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pNext-03560# The+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--     structure /must/ not be included in the @pNext@ chain of the+--     'CopyAccelerationStructureToMemoryInfoKHR' structure+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-mode-03412# @mode@+--     /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-pInfo-parameter#+--     @pInfo@ /must/ be a valid pointer to a valid+--     'CopyAccelerationStructureToMemoryInfoKHR' structure+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-commandBuffer-cmdpool#+--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdCopyAccelerationStructureToMemoryKHR-renderpass# This+--     command /must/ only be called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'CopyAccelerationStructureToMemoryInfoKHR'+cmdCopyAccelerationStructureToMemoryKHR :: forall a io+                                         . (Extendss CopyAccelerationStructureToMemoryInfoKHR a, PokeChain a, MonadIO io)+                                        => -- No documentation found for Nested "vkCmdCopyAccelerationStructureToMemoryKHR" "commandBuffer"+                                           CommandBuffer+                                        -> -- No documentation found for Nested "vkCmdCopyAccelerationStructureToMemoryKHR" "pInfo"+                                           (CopyAccelerationStructureToMemoryInfoKHR a)+                                        -> io ()+cmdCopyAccelerationStructureToMemoryKHR commandBuffer info = liftIO . evalContT $ do+  let vkCmdCopyAccelerationStructureToMemoryKHRPtr = pVkCmdCopyAccelerationStructureToMemoryKHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyAccelerationStructureToMemoryKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyAccelerationStructureToMemoryKHR is null" Nothing Nothing+  let vkCmdCopyAccelerationStructureToMemoryKHR' = mkVkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHRPtr+  pInfo <- ContT $ withCStruct (info)+  lift $ vkCmdCopyAccelerationStructureToMemoryKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pInfo)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCopyAccelerationStructureToMemoryKHR+  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct CopyAccelerationStructureToMemoryInfoKHR) -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct CopyAccelerationStructureToMemoryInfoKHR) -> IO Result++-- | vkCopyAccelerationStructureToMemoryKHR - Serialize an acceleration+-- structure on the host+--+-- = Parameters+--+-- This command fulfills the same task as+-- 'cmdCopyAccelerationStructureToMemoryKHR' but executed by the host.+--+-- = Description+--+-- This command produces the same results as+-- 'cmdCopyAccelerationStructureToMemoryKHR', but writes its result+-- directly to a host pointer, and is executed on the host rather than the+-- device. The output /may/ not necessarily be bit-for-bit identical, but+-- it can be equally used by either+-- 'cmdCopyMemoryToAccelerationStructureKHR' or+-- 'copyMemoryToAccelerationStructureKHR'.+--+-- -   @device@ is the device which owns @pInfo->src@.+--+-- -   @pInfo@ is a pointer to a 'CopyAccelerationStructureToMemoryInfoKHR'+--     structure defining the copy operation.+--+-- If the+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+-- structure is included in the @pNext@ chain of the+-- 'CopyAccelerationStructureToMemoryInfoKHR' structure, the operation of+-- this command is /deferred/, as defined in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations>+-- chapter.+--+-- == Valid Usage+--+-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-None-03445# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to host-visible memory+--+-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-None-03446# All+--     'DeviceOrHostAddressKHR' referenced by this command /must/ contain+--     valid host pointers+--+-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-rayTracingHostAccelerationStructureCommands-03447#+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkCopyAccelerationStructureToMemoryKHR-pInfo-parameter#+--     @pInfo@ /must/ be a valid pointer to a valid+--     'CopyAccelerationStructureToMemoryInfoKHR' structure+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+-- = See Also+--+-- 'CopyAccelerationStructureToMemoryInfoKHR',+-- 'Vulkan.Core10.Handles.Device'+copyAccelerationStructureToMemoryKHR :: forall a io+                                      . (Extendss CopyAccelerationStructureToMemoryInfoKHR a, PokeChain a, MonadIO io)+                                     => -- No documentation found for Nested "vkCopyAccelerationStructureToMemoryKHR" "device"+                                        Device+                                     -> -- No documentation found for Nested "vkCopyAccelerationStructureToMemoryKHR" "pInfo"+                                        (CopyAccelerationStructureToMemoryInfoKHR a)+                                     -> io (Result)+copyAccelerationStructureToMemoryKHR device info = liftIO . evalContT $ do+  let vkCopyAccelerationStructureToMemoryKHRPtr = pVkCopyAccelerationStructureToMemoryKHR (deviceCmds (device :: Device))+  lift $ unless (vkCopyAccelerationStructureToMemoryKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyAccelerationStructureToMemoryKHR is null" Nothing Nothing+  let vkCopyAccelerationStructureToMemoryKHR' = mkVkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHRPtr+  pInfo <- ContT $ withCStruct (info)+  r <- lift $ vkCopyAccelerationStructureToMemoryKHR' (deviceHandle (device)) (forgetExtensions pInfo)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pure $ (r)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdCopyMemoryToAccelerationStructureKHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct CopyMemoryToAccelerationStructureInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct CopyMemoryToAccelerationStructureInfoKHR) -> IO ()++-- | vkCmdCopyMemoryToAccelerationStructureKHR - Copy device memory to an+-- acceleration structure+--+-- = Parameters+--+-- This command can accept acceleration structures produced by either+-- 'cmdCopyAccelerationStructureToMemoryKHR' or+-- 'copyAccelerationStructureToMemoryKHR'.+--+-- = Description+--+-- -   @commandBuffer@ is the command buffer into which the command will be+--     recorded.+--+-- -   @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'+--     structure defining the copy operation.+--+-- The structure provided as input to deserialize is as described in+-- 'cmdCopyAccelerationStructureToMemoryKHR', with any acceleration+-- structure handles filled in with the newly-queried handles to bottom+-- level acceleration structures created before deserialization. These do+-- not need to be built at deserialize time, but /must/ be created.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-None-04049# All+--     'DeviceOrHostAddressKHR' referenced by this command /must/ contain+--     valid device addresses for a buffer bound to device memory. If the+--     buffer is non-sparse then it /must/ be bound completely and+--     contiguously to a single VkDeviceMemory object+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-None-03563# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to device memory+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pNext-03564# The+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--     structure /must/ not be included in the @pNext@ chain of the+--     'CopyMemoryToAccelerationStructureInfoKHR' structure+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-mode-03413# @mode@+--     /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-03414# The+--     data in @pInfo->src@ /must/ have a format compatible with the+--     destination physical device as returned by+--     'getDeviceAccelerationStructureCompatibilityKHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-pInfo-parameter#+--     @pInfo@ /must/ be a valid pointer to a valid+--     'CopyMemoryToAccelerationStructureInfoKHR' structure+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-commandBuffer-cmdpool#+--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdCopyMemoryToAccelerationStructureKHR-renderpass# This+--     command /must/ only be called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'CopyMemoryToAccelerationStructureInfoKHR'+cmdCopyMemoryToAccelerationStructureKHR :: forall a io+                                         . (Extendss CopyMemoryToAccelerationStructureInfoKHR a, PokeChain a, MonadIO io)+                                        => -- No documentation found for Nested "vkCmdCopyMemoryToAccelerationStructureKHR" "commandBuffer"+                                           CommandBuffer+                                        -> -- No documentation found for Nested "vkCmdCopyMemoryToAccelerationStructureKHR" "pInfo"+                                           (CopyMemoryToAccelerationStructureInfoKHR a)+                                        -> io ()+cmdCopyMemoryToAccelerationStructureKHR commandBuffer info = liftIO . evalContT $ do+  let vkCmdCopyMemoryToAccelerationStructureKHRPtr = pVkCmdCopyMemoryToAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdCopyMemoryToAccelerationStructureKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdCopyMemoryToAccelerationStructureKHR is null" Nothing Nothing+  let vkCmdCopyMemoryToAccelerationStructureKHR' = mkVkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHRPtr+  pInfo <- ContT $ withCStruct (info)+  lift $ vkCmdCopyMemoryToAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pInfo)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCopyMemoryToAccelerationStructureKHR+  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct CopyMemoryToAccelerationStructureInfoKHR) -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct CopyMemoryToAccelerationStructureInfoKHR) -> IO Result++-- | vkCopyMemoryToAccelerationStructureKHR - Deserialize an acceleration+-- structure on the host+--+-- = Parameters+--+-- This command fulfills the same task as+-- 'cmdCopyMemoryToAccelerationStructureKHR' but is executed by the host.+--+-- = Description+--+-- This command can accept acceleration structures produced by either+-- 'cmdCopyAccelerationStructureToMemoryKHR' or+-- 'copyAccelerationStructureToMemoryKHR'.+--+-- -   @device@ is the device which owns @pInfo->dst@.+--+-- -   @pInfo@ is a pointer to a 'CopyMemoryToAccelerationStructureInfoKHR'+--     structure defining the copy operation.+--+-- If the+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+-- structure is included in the @pNext@ chain of the+-- 'CopyMemoryToAccelerationStructureInfoKHR' structure, the operation of+-- this command is /deferred/, as defined in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>+-- chapter.+--+-- == Valid Usage+--+-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-None-03442# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to host-visible memory+--+-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-None-03443# All+--     'DeviceOrHostAddressConstKHR' referenced by this command /must/+--     contain valid host pointers+--+-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-rayTracingHostAccelerationStructureCommands-03444#+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkCopyMemoryToAccelerationStructureKHR-pInfo-parameter#+--     @pInfo@ /must/ be a valid pointer to a valid+--     'CopyMemoryToAccelerationStructureInfoKHR' structure+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+-- = See Also+--+-- 'CopyMemoryToAccelerationStructureInfoKHR',+-- 'Vulkan.Core10.Handles.Device'+copyMemoryToAccelerationStructureKHR :: forall a io+                                      . (Extendss CopyMemoryToAccelerationStructureInfoKHR a, PokeChain a, MonadIO io)+                                     => -- No documentation found for Nested "vkCopyMemoryToAccelerationStructureKHR" "device"+                                        Device+                                     -> -- No documentation found for Nested "vkCopyMemoryToAccelerationStructureKHR" "pInfo"+                                        (CopyMemoryToAccelerationStructureInfoKHR a)+                                     -> io (Result)+copyMemoryToAccelerationStructureKHR device info = liftIO . evalContT $ do+  let vkCopyMemoryToAccelerationStructureKHRPtr = pVkCopyMemoryToAccelerationStructureKHR (deviceCmds (device :: Device))+  lift $ unless (vkCopyMemoryToAccelerationStructureKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCopyMemoryToAccelerationStructureKHR is null" Nothing Nothing+  let vkCopyMemoryToAccelerationStructureKHR' = mkVkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHRPtr+  pInfo <- ContT $ withCStruct (info)+  r <- lift $ vkCopyMemoryToAccelerationStructureKHR' (deviceHandle (device)) (forgetExtensions pInfo)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pure $ (r)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdWriteAccelerationStructuresPropertiesKHR+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> QueryPool -> Word32 -> IO ()++-- | vkCmdWriteAccelerationStructuresPropertiesKHR - Write acceleration+-- structure result parameters to query results.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02493#+--     @queryPool@ /must/ have been created with a @queryType@ matching+--     @queryType@+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-02494#+--     The queries identified by @queryPool@ and @firstQuery@ /must/ be+--     /unavailable/+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructures-03431#+--     All acceleration structures in @accelerationStructures@ /must/ have+--     been built with+--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if+--     @queryType@ is+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryType-03432#+--     @queryType@ /must/ be+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'+--     or+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parameter#+--     @pAccelerationStructures@ /must/ be a valid pointer to an array of+--     @accelerationStructureCount@ valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryType-parameter#+--     @queryType@ /must/ be a valid+--     'Vulkan.Core10.Enums.QueryType.QueryType' value+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-queryPool-parameter#+--     @queryPool@ /must/ be a valid 'Vulkan.Core10.Handles.QueryPool'+--     handle+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commandBuffer-cmdpool#+--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-renderpass# This+--     command /must/ only be called outside of a render pass instance+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-accelerationStructureCount-arraylength#+--     @accelerationStructureCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCmdWriteAccelerationStructuresPropertiesKHR-commonparent#+--     Each of @commandBuffer@, @queryPool@, and the elements of+--     @pAccelerationStructures@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.Handles.QueryPool',+-- 'Vulkan.Core10.Enums.QueryType.QueryType'+cmdWriteAccelerationStructuresPropertiesKHR :: forall io+                                             . (MonadIO io)+                                            => -- | @commandBuffer@ is the command buffer into which the command will be+                                               -- recorded.+                                               CommandBuffer+                                            -> -- | @pAccelerationStructures@ is a pointer to an array of existing+                                               -- previously built acceleration structures.+                                               ("accelerationStructures" ::: Vector AccelerationStructureKHR)+                                            -> -- | @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value+                                               -- specifying the type of queries managed by the pool.+                                               QueryType+                                            -> -- | @queryPool@ is the query pool that will manage the results of the query.+                                               QueryPool+                                            -> -- | @firstQuery@ is the first query index within the query pool that will+                                               -- contain the @accelerationStructureCount@ number of results.+                                               ("firstQuery" ::: Word32)+                                            -> io ()+cmdWriteAccelerationStructuresPropertiesKHR commandBuffer accelerationStructures queryType queryPool firstQuery = liftIO . evalContT $ do+  let vkCmdWriteAccelerationStructuresPropertiesKHRPtr = pVkCmdWriteAccelerationStructuresPropertiesKHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdWriteAccelerationStructuresPropertiesKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdWriteAccelerationStructuresPropertiesKHR is null" Nothing Nothing+  let vkCmdWriteAccelerationStructuresPropertiesKHR' = mkVkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHRPtr+  pPAccelerationStructures <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8+  lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)+  lift $ vkCmdWriteAccelerationStructuresPropertiesKHR' (commandBufferHandle (commandBuffer)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32)) (pPAccelerationStructures) (queryType) (queryPool) (firstQuery)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkWriteAccelerationStructuresPropertiesKHR+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result) -> Ptr Device_T -> Word32 -> Ptr AccelerationStructureKHR -> QueryType -> CSize -> Ptr () -> CSize -> IO Result++-- | vkWriteAccelerationStructuresPropertiesKHR - Query acceleration+-- structure meta-data on the host+--+-- = Parameters+--+-- This command fulfills the same task as+-- 'cmdWriteAccelerationStructuresPropertiesKHR' but executed by the host.+--+-- = Description+--+-- -   @device@ is the device which owns the acceleration structures in+--     @pAccelerationStructures@.+--+-- -   @accelerationStructureCount@ is the count of acceleration structures+--     for which to query the property.+--+-- -   @pAccelerationStructures@ points to an array of existing previously+--     built acceleration structures.+--+-- -   @queryType@ is a 'Vulkan.Core10.Enums.QueryType.QueryType' value+--     specifying the property to be queried.+--+-- -   @dataSize@ is the size in bytes of the buffer pointed to by @pData@.+--+-- -   @pData@ is a pointer to a user-allocated buffer where the results+--     will be written.+--+-- -   @stride@ is the stride in bytes between results for individual+--     queries within @pData@.+--+-- == Valid Usage+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03448# If+--     @queryType@ is+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',+--     then @stride@ /must/ be a multiple of the size of+--     'Vulkan.Core10.FundamentalTypes.DeviceSize'+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03449# If+--     @queryType@ is+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR',+--     then @data@ /must/ point to a+--     'Vulkan.Core10.FundamentalTypes.DeviceSize'+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03450# If+--     @queryType@ is+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',+--     then @stride@ /must/ be a multiple of the size of+--     'Vulkan.Core10.FundamentalTypes.DeviceSize'+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03451# If+--     @queryType@ is+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR',+--     then @data@ /must/ point to a+--     'Vulkan.Core10.FundamentalTypes.DeviceSize'+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-03452#+--     @dataSize@ /must/ be greater than or equal to+--     @accelerationStructureCount@*@stride@+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-03453#+--     The acceleration structures referenced by @pAccelerationStructures@+--     /must/ be bound to host-visible memory+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructures-03431#+--     All acceleration structures in @accelerationStructures@ /must/ have+--     been built with+--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if+--     @queryType@ is+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-03432#+--     @queryType@ /must/ be+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR'+--     or+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-rayTracingHostAccelerationStructureCommands-03454#+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parameter#+--     @pAccelerationStructures@ /must/ be a valid pointer to an array of+--     @accelerationStructureCount@ valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-queryType-parameter#+--     @queryType@ /must/ be a valid+--     'Vulkan.Core10.Enums.QueryType.QueryType' value+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-pData-parameter#+--     @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-accelerationStructureCount-arraylength#+--     @accelerationStructureCount@ /must/ be greater than @0@+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-dataSize-arraylength#+--     @dataSize@ /must/ be greater than @0@+--+-- -   #VUID-vkWriteAccelerationStructuresPropertiesKHR-pAccelerationStructures-parent#+--     Each element of @pAccelerationStructures@ /must/ have been created,+--     allocated, or retrieved from @device@+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+-- = See Also+--+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'Vulkan.Core10.Handles.Device',+-- 'Vulkan.Core10.Enums.QueryType.QueryType'+writeAccelerationStructuresPropertiesKHR :: forall io+                                          . (MonadIO io)+                                         => -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "device"+                                            Device+                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "pAccelerationStructures"+                                            ("accelerationStructures" ::: Vector AccelerationStructureKHR)+                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "queryType"+                                            QueryType+                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "dataSize"+                                            ("dataSize" ::: Word64)+                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "pData"+                                            ("data" ::: Ptr ())+                                         -> -- No documentation found for Nested "vkWriteAccelerationStructuresPropertiesKHR" "stride"+                                            ("stride" ::: Word64)+                                         -> io ()+writeAccelerationStructuresPropertiesKHR device accelerationStructures queryType dataSize data' stride = liftIO . evalContT $ do+  let vkWriteAccelerationStructuresPropertiesKHRPtr = pVkWriteAccelerationStructuresPropertiesKHR (deviceCmds (device :: Device))+  lift $ unless (vkWriteAccelerationStructuresPropertiesKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkWriteAccelerationStructuresPropertiesKHR is null" Nothing Nothing+  let vkWriteAccelerationStructuresPropertiesKHR' = mkVkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHRPtr+  pPAccelerationStructures <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8+  lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)+  r <- lift $ vkWriteAccelerationStructuresPropertiesKHR' (deviceHandle (device)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32)) (pPAccelerationStructures) (queryType) (CSize (dataSize)) (data') (CSize (stride))+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdTraceRaysKHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Word32 -> Word32 -> Word32 -> IO ()++-- | vkCmdTraceRaysKHR - Initialize a ray tracing dispatch+--+-- = Description+--+-- When the command is executed, a ray generation group of @width@ ×+-- @height@ × @depth@ rays is assembled.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdTraceRaysKHR-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+--     this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic+--     operations as a result of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdTraceRaysKHR-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering, as specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+--     reduction mode of either+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+--     or+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+--     as a result of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering together with minmax filtering, as+--     specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdTraceRaysKHR-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+--     sampled as a result of this command /must/ only be sampled using a+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02698# For each push constant that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push+--     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02699# Descriptors in each bound+--     descriptor set, specified via+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/+--     be valid if they are statically used by the+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+--     used by this command+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02700# A valid pipeline /must/ be bound+--     to the pipeline bind point used by this command+--+-- -   #VUID-vkCmdTraceRaysKHR-commandBuffer-02701# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02859# There /must/ not have been any+--     calls to dynamic state setting commands for any state not specified+--     as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to+--     the pipeline bind point used by this command, since that pipeline+--     was bound+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used to sample from any+--     'Vulkan.Core10.Handles.Image' with a+--     'Vulkan.Core10.Handles.ImageView' of the type+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+--     any shader stage+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that+--     includes a LOD bias or any offset values, in any shader stage+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a uniform buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdTraceRaysKHR-None-02706# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a storage buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdTraceRaysKHR-commandBuffer-02707# If @commandBuffer@ is+--     an unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource+--+-- -   #VUID-vkCmdTraceRaysKHR-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdTraceRaysKHR-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdTraceRaysKHR-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdTraceRaysKHR-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdTraceRaysKHR-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdTraceRaysKHR-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdTraceRaysKHR-sparseImageInt64Atomics-04474# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+--     created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdTraceRaysKHR-sparseImageInt64Atomics-04475# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+--     created with the+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdTraceRaysKHR-None-03429# Any shader group handle+--     referenced by this call /must/ have been queried from the currently+--     bound ray tracing shader pipeline+--+-- -   #VUID-vkCmdTraceRaysKHR-maxRecursionDepth-03430# This command /must/+--     not cause a shader call instruction to be executed from a shader+--     invocation with a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>+--     greater than the value of @maxRecursionDepth@ used to create the+--     bound ray tracing pipeline+--+-- -   #VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-04019# If+--     @pRayGenShaderBindingTable->buffer@ is non-sparse then it /must/ be+--     bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysKHR-offset-04020# The @offset@ member of+--     @pRayGenShaderBindingTable@ /must/ be less than the size of the+--     @pRayGenShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-04021#+--     @pRayGenShaderBindingTable->offset@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@+--+-- -   #VUID-vkCmdTraceRaysKHR-pRayGenShaderBindingTable-04022#+--     @pRayGenShaderBindingTable->offset@ ++--     @pRayGenShaderBindingTable->size@ /must/ be less than or equal to+--     the size of @pRayGenShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysKHR-size-04023# The @size@ member of+--     @pRayGenShaderBindingTable@ /must/ be equal to its @stride@ member+--+-- -   #VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-04024# If+--     @pMissShaderBindingTable->buffer@ is non-sparse then it /must/ be+--     bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysKHR-offset-04025# The @offset@ member of+--     @pMissShaderBindingTable@ /must/ be less than the size of+--     @pMissShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysKHR-offset-04026# The @offset@ member of+--     @pMissShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@+--+-- -   #VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-04027#+--     @pMissShaderBindingTable->offset@ + @pMissShaderBindingTable->size@+--     /must/ be less than or equal to the size of+--     @pMissShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysKHR-stride-04028# The @stride@ member of+--     @pMissShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@+--+-- -   #VUID-vkCmdTraceRaysKHR-stride-04029# The @stride@ member of+--     @pMissShaderBindingTable@ /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@+--+-- -   #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-04030# If+--     @pHitShaderBindingTable->buffer@ is non-sparse then it /must/ be+--     bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysKHR-offset-04031# The @offset@ member of+--     @pHitShaderBindingTable@ /must/ be less than the size of+--     @pHitShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysKHR-offset-04032# The @offset@ member of+--     @pHitShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@+--+-- -   #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-04033#+--     @pHitShaderBindingTable->offset@ + @pHitShaderBindingTable->size@+--     /must/ be less than or equal to the size of+--     @pHitShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysKHR-stride-04034# The @stride@ member of+--     @pHitShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@+--+-- -   #VUID-vkCmdTraceRaysKHR-stride-04035# The @stride@ member of+--     @pHitShaderBindingTable@ /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@+--+-- -   #VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-04036# If+--     @pCallableShaderBindingTable->buffer@ is non-sparse then it /must/+--     be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysKHR-offset-04037# The @offset@ member of+--     @pCallableShaderBindingTable@ /must/ be less than the size of+--     @pCallableShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysKHR-offset-04038# The @offset@ member of+--     @pCallableShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@+--+-- -   #VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-04039#+--     @pCallableShaderBindingTable->offset@ ++--     @pCallableShaderBindingTable->size@ /must/ be less than or equal to+--     the size of @pCallableShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysKHR-stride-04040# The @stride@ member of+--     @pCallableShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@+--+-- -   #VUID-vkCmdTraceRaysKHR-stride-04041# The @stride@ member of+--     @pCallableShaderBindingTable@ /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@+--+-- -   #VUID-vkCmdTraceRaysKHR-flags-03508# If the currently bound ray+--     tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdTraceRaysKHR-flags-03509# If the currently bound ray+--     tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdTraceRaysKHR-flags-03510# If the currently bound ray+--     tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdTraceRaysKHR-flags-03511# If the currently bound ray+--     tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR',+--     the shader group handle identified by @pMissShaderBindingTable@+--     /must/ contain a valid miss shader+--+-- -   #VUID-vkCmdTraceRaysKHR-flags-03512# If the currently bound ray+--     tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',+--     entries in @pHitShaderBindingTable@ accessed as a result of this+--     command in order to execute an any hit shader /must/ not be set to+--     zero+--+-- -   #VUID-vkCmdTraceRaysKHR-flags-03513# If the currently bound ray+--     tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',+--     entries in @pHitShaderBindingTable@ accessed as a result of this+--     command in order to execute a closest hit shader /must/ not be set+--     to zero+--+-- -   #VUID-vkCmdTraceRaysKHR-flags-03514# If the currently bound ray+--     tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',+--     entries in @pHitShaderBindingTable@ accessed as a result of this+--     command in order to execute an intersection shader /must/ not be set+--     to zero+--+-- -   #VUID-vkCmdTraceRaysKHR-commandBuffer-02712# If @commandBuffer@ is a+--     protected command buffer, any resource written to by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be an unprotected resource+--+-- -   #VUID-vkCmdTraceRaysKHR-commandBuffer-02713# If @commandBuffer@ is a+--     protected command buffer, pipeline stages other than the+--     framebuffer-space and compute stages in the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point /must/ not write to any resource+--+-- -   #VUID-vkCmdTraceRaysKHR-width-03505# @width@ /must/ be less than or+--     equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]+--+-- -   #VUID-vkCmdTraceRaysKHR-height-03506# @height@ /must/ be less than+--     or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]+--+-- -   #VUID-vkCmdTraceRaysKHR-depth-03507# @depth@ /must/ be less than or+--     equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdTraceRaysKHR-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdTraceRaysKHR-pRaygenShaderBindingTable-parameter#+--     @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid+--     'StridedBufferRegionKHR' structure+--+-- -   #VUID-vkCmdTraceRaysKHR-pMissShaderBindingTable-parameter#+--     @pMissShaderBindingTable@ /must/ be a valid pointer to a valid+--     'StridedBufferRegionKHR' structure+--+-- -   #VUID-vkCmdTraceRaysKHR-pHitShaderBindingTable-parameter#+--     @pHitShaderBindingTable@ /must/ be a valid pointer to a valid+--     'StridedBufferRegionKHR' structure+--+-- -   #VUID-vkCmdTraceRaysKHR-pCallableShaderBindingTable-parameter#+--     @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid+--     'StridedBufferRegionKHR' structure+--+-- -   #VUID-vkCmdTraceRaysKHR-commandBuffer-recording# @commandBuffer@+--     /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdTraceRaysKHR-renderpass# This command /must/ only be+--     called outside of a render pass instance+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer', 'StridedBufferRegionKHR'+cmdTraceRaysKHR :: forall io+                 . (MonadIO io)+                => -- | @commandBuffer@ is the command buffer into which the command will be+                   -- recorded.+                   CommandBuffer+                -> -- | @pRaygenShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the+                   -- shader binding table data for the ray generation shader stage.+                   ("raygenShaderBindingTable" ::: StridedBufferRegionKHR)+                -> -- | @pMissShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the+                   -- shader binding table data for the miss shader stage.+                   ("missShaderBindingTable" ::: StridedBufferRegionKHR)+                -> -- | @pHitShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the+                   -- shader binding table data for the hit shader stage.+                   ("hitShaderBindingTable" ::: StridedBufferRegionKHR)+                -> -- | @pCallableShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds+                   -- the shader binding table data for the callable shader stage.+                   ("callableShaderBindingTable" ::: StridedBufferRegionKHR)+                -> -- | @width@ is the width of the ray trace query dimensions.+                   ("width" ::: Word32)+                -> -- | @height@ is height of the ray trace query dimensions.+                   ("height" ::: Word32)+                -> -- | @depth@ is depth of the ray trace query dimensions.+                   ("depth" ::: Word32)+                -> io ()+cmdTraceRaysKHR commandBuffer raygenShaderBindingTable missShaderBindingTable hitShaderBindingTable callableShaderBindingTable width height depth = liftIO . evalContT $ do+  let vkCmdTraceRaysKHRPtr = pVkCmdTraceRaysKHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdTraceRaysKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdTraceRaysKHR is null" Nothing Nothing+  let vkCmdTraceRaysKHR' = mkVkCmdTraceRaysKHR vkCmdTraceRaysKHRPtr+  pRaygenShaderBindingTable <- ContT $ withCStruct (raygenShaderBindingTable)+  pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable)+  pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable)+  pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable)+  lift $ vkCmdTraceRaysKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (width) (height) (depth)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetRayTracingShaderGroupHandlesKHR+  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result++-- | vkGetRayTracingShaderGroupHandlesKHR - Query ray tracing pipeline shader+-- group handles+--+-- == Valid Usage+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-04050#+--     @firstGroup@ /must/ be less than the number of shader groups in+--     @pipeline@+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-02419# The sum+--     of @firstGroup@ and @groupCount@ /must/ be less than or equal to the+--     number of shader groups in @pipeline@+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-02420#+--     @dataSize@ /must/ be at least+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@ ×+--     @groupCount@+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-03482#+--     @pipeline@ /must/ have not been created with+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-parameter#+--     @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-pData-parameter# @pData@+--     /must/ be a valid pointer to an array of @dataSize@ bytes+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-arraylength#+--     @dataSize@ /must/ be greater than @0@+--+-- -   #VUID-vkGetRayTracingShaderGroupHandlesKHR-pipeline-parent#+--     @pipeline@ /must/ have been created, allocated, or retrieved from+--     @device@+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'+getRayTracingShaderGroupHandlesKHR :: forall io+                                    . (MonadIO io)+                                   => -- | @device@ is the logical device containing the ray tracing pipeline.+                                      Device+                                   -> -- | @pipeline@ is the ray tracing pipeline object containing the shaders.+                                      Pipeline+                                   -> -- | @firstGroup@ is the index of the first group to retrieve a handle for+                                      -- from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ or+                                      -- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@pGroups@+                                      -- array.+                                      ("firstGroup" ::: Word32)+                                   -> -- | @groupCount@ is the number of shader handles to retrieve.+                                      ("groupCount" ::: Word32)+                                   -> -- | @dataSize@ is the size in bytes of the buffer pointed to by @pData@.+                                      ("dataSize" ::: Word64)+                                   -> -- | @pData@ is a pointer to a user-allocated buffer where the results will+                                      -- be written.+                                      ("data" ::: Ptr ())+                                   -> io ()+getRayTracingShaderGroupHandlesKHR device pipeline firstGroup groupCount dataSize data' = liftIO $ do+  let vkGetRayTracingShaderGroupHandlesKHRPtr = pVkGetRayTracingShaderGroupHandlesKHR (deviceCmds (device :: Device))+  unless (vkGetRayTracingShaderGroupHandlesKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRayTracingShaderGroupHandlesKHR is null" Nothing Nothing+  let vkGetRayTracingShaderGroupHandlesKHR' = mkVkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHRPtr+  r <- vkGetRayTracingShaderGroupHandlesKHR' (deviceHandle (device)) (pipeline) (firstGroup) (groupCount) (CSize (dataSize)) (data')+  when (r < SUCCESS) (throwIO (VulkanException r))+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR+  :: FunPtr (Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result) -> Ptr Device_T -> Pipeline -> Word32 -> Word32 -> CSize -> Ptr () -> IO Result++-- | vkGetRayTracingCaptureReplayShaderGroupHandlesKHR - Query ray tracing+-- capture replay pipeline shader group handles+--+-- == Valid Usage+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-04051#+--     @firstGroup@ /must/ be less than the number of shader groups in+--     @pipeline@+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-03483#+--     The sum of @firstGroup@ and @groupCount@ /must/ be less than or+--     equal to the number of shader groups in @pipeline@+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-03484#+--     @dataSize@ /must/ be at least+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleCaptureReplaySize@+--     × @groupCount@+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-rayTracingShaderGroupHandleCaptureReplay-03485#+--     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@+--     /must/ be enabled to call this function+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-parameter#+--     @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pData-parameter#+--     @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-arraylength#+--     @dataSize@ /must/ be greater than @0@+--+-- -   #VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-pipeline-parent#+--     @pipeline@ /must/ have been created, allocated, or retrieved from+--     @device@+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline'+getRayTracingCaptureReplayShaderGroupHandlesKHR :: forall io+                                                 . (MonadIO io)+                                                => -- | @device@ is the logical device containing the ray tracing pipeline.+                                                   Device+                                                -> -- | @pipeline@ is the ray tracing pipeline object containing the shaders.+                                                   Pipeline+                                                -> -- | @firstGroup@ is the index of the first group to retrieve a handle for+                                                   -- from the 'RayTracingPipelineCreateInfoKHR'::@pGroups@ array.+                                                   ("firstGroup" ::: Word32)+                                                -> -- | @groupCount@ is the number of shader handles to retrieve.+                                                   ("groupCount" ::: Word32)+                                                -> -- | @dataSize@ is the size in bytes of the buffer pointed to by @pData@.+                                                   ("dataSize" ::: Word64)+                                                -> -- | @pData@ is a pointer to a user-allocated buffer where the results will+                                                   -- be written.+                                                   ("data" ::: Ptr ())+                                                -> io ()+getRayTracingCaptureReplayShaderGroupHandlesKHR device pipeline firstGroup groupCount dataSize data' = liftIO $ do+  let vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr = pVkGetRayTracingCaptureReplayShaderGroupHandlesKHR (deviceCmds (device :: Device))+  unless (vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetRayTracingCaptureReplayShaderGroupHandlesKHR is null" Nothing Nothing+  let vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' = mkVkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHRPtr+  r <- vkGetRayTracingCaptureReplayShaderGroupHandlesKHR' (deviceHandle (device)) (pipeline) (firstGroup) (groupCount) (CSize (dataSize)) (data')+  when (r < SUCCESS) (throwIO (VulkanException r))+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCreateRayTracingPipelinesKHR+  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct RayTracingPipelineCreateInfoKHR) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result++-- | vkCreateRayTracingPipelinesKHR - Creates a new ray tracing pipeline+-- object+--+-- = Description+--+-- The 'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'+-- error is returned if the implementation is unable to re-use the shader+-- group handles provided in+-- 'RayTracingShaderGroupCreateInfoKHR'::@pShaderGroupCaptureReplayHandle@+-- when+-- 'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@+-- is enabled.+--+-- == Valid Usage+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-flags-03415# If the @flags@+--     member of any element of @pCreateInfos@ contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and the @basePipelineIndex@ member of that same element is not+--     @-1@, @basePipelineIndex@ /must/ be less than the index into+--     @pCreateInfos@ that corresponds to that element+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-flags-03416# If the @flags@+--     member of any element of @pCreateInfos@ contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, the base pipeline /must/ have been created with the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'+--     flag set+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-02903# If+--     @pipelineCache@ was created with+--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT',+--     host access to @pipelineCache@ /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-rayTracing-03455# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-parameter# If+--     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+--     @pipelineCache@ /must/ be a valid+--     'Vulkan.Core10.Handles.PipelineCache' handle+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-pCreateInfos-parameter#+--     @pCreateInfos@ /must/ be a valid pointer to an array of+--     @createInfoCount@ valid 'RayTracingPipelineCreateInfoKHR' structures+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-pPipelines-parameter#+--     @pPipelines@ /must/ be a valid pointer to an array of+--     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-createInfoCount-arraylength#+--     @createInfoCount@ /must/ be greater than @0@+--+-- -   #VUID-vkCreateRayTracingPipelinesKHR-pipelineCache-parent# If+--     @pipelineCache@ is a valid handle, it /must/ have been created,+--     allocated, or retrieved from @device@+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'+--+--     -   'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED_EXT'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS'+--+-- = See Also+--+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',+-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline',+-- 'Vulkan.Core10.Handles.PipelineCache', 'RayTracingPipelineCreateInfoKHR'+createRayTracingPipelinesKHR :: forall io+                              . (MonadIO io)+                             => -- | @device@ is the logical device that creates the ray tracing pipelines.+                                Device+                             -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',+                                -- indicating that pipeline caching is disabled, or the handle of a valid+                                -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-cache pipeline cache>+                                -- object, in which case use of that cache is enabled for the duration of+                                -- the command.+                                PipelineCache+                             -> -- | @pCreateInfos@ is a pointer to an array of+                                -- 'RayTracingPipelineCreateInfoKHR' structures.+                                ("createInfos" ::: Vector (SomeStruct RayTracingPipelineCreateInfoKHR))+                             -> -- | @pAllocator@ controls host memory allocation as described in the+                                -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>+                                -- chapter.+                                ("allocator" ::: Maybe AllocationCallbacks)+                             -> io (Result, ("pipelines" ::: Vector Pipeline))+createRayTracingPipelinesKHR device pipelineCache createInfos allocator = liftIO . evalContT $ do+  let vkCreateRayTracingPipelinesKHRPtr = pVkCreateRayTracingPipelinesKHR (deviceCmds (device :: Device))+  lift $ unless (vkCreateRayTracingPipelinesKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateRayTracingPipelinesKHR is null" Nothing Nothing+  let vkCreateRayTracingPipelinesKHR' = mkVkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHRPtr+  pPCreateInfos <- ContT $ allocaBytesAligned @(RayTracingPipelineCreateInfoKHR _) ((Data.Vector.length (createInfos)) * 120) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPCreateInfos `plusPtr` (120 * (i)) :: Ptr (RayTracingPipelineCreateInfoKHR _))) (e) . ($ ())) (createInfos)+  pAllocator <- case (allocator) of+    Nothing -> pure nullPtr+    Just j -> ContT $ withCStruct (j)+  pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free+  r <- lift $ vkCreateRayTracingPipelinesKHR' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) (\i -> peek @Pipeline ((pPPipelines `advancePtrBytes` (8 * (i)) :: Ptr Pipeline)))+  pure $ (r, pPipelines)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdTraceRaysIndirectKHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Buffer -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Ptr StridedBufferRegionKHR -> Buffer -> DeviceSize -> IO ()++-- | vkCmdTraceRaysIndirectKHR - Initialize an indirect ray tracing dispatch+--+-- = Description+--+-- 'cmdTraceRaysIndirectKHR' behaves similarly to 'cmdTraceRaysKHR' except+-- that the ray trace query dimensions are read by the device from @buffer@+-- during execution. The parameters of trace ray are encoded in the+-- 'TraceRaysIndirectCommandKHR' structure located at @offset@ bytes in+-- @buffer@.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and+--     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is+--     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of+--     this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic+--     operations as a result of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command, then the image view’s+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>+--     /must/ contain+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result+--     of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering, as specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a+--     reduction mode of either+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'+--     or+--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'+--     as a result of this command /must/ have a+--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that+--     supports cubic filtering together with minmax filtering, as+--     specified by+--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@+--     returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a+--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'+--     sampled as a result of this command /must/ only be sampled using a+--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of+--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a+--     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create+--     the current 'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02698# For each push constant+--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'+--     bound to the pipeline bind point used by this command, a push+--     constant value /must/ have been set for the same pipeline bind+--     point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is+--     compatible for push constants, with the+--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current+--     'Vulkan.Core10.Handles.Pipeline', as described in+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02699# Descriptors in each+--     bound descriptor set, specified via+--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/+--     be valid if they are statically used by the+--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point+--     used by this command+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02700# A valid pipeline /must/+--     be bound to the pipeline bind point used by this command+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02859# There /must/ not have+--     been any calls to dynamic state setting commands for any state not+--     specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object+--     bound to the pipeline bind point used by this command, since that+--     pipeline was bound+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used to sample from any+--     'Vulkan.Core10.Handles.Image' with a+--     'Vulkan.Core10.Handles.ImageView' of the type+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or+--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in+--     any shader stage+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with+--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a+--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized+--     coordinates, that sampler /must/ not be used with any of the SPIR-V+--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that+--     includes a LOD bias or any offset values, in any shader stage+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02705# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a uniform buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-02706# If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access>+--     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command+--     accesses a storage buffer, it /must/ not access values outside of+--     the range of the buffer as specified in the descriptor set bound to+--     the same pipeline bind point+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707# If+--     @commandBuffer@ is an unprotected command buffer, any resource+--     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the+--     pipeline bind point used by this command /must/ not be a protected+--     resource+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format.+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width+--     is accessed as a result of this command, the @SampledType@ of the+--     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of+--     64.+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a+--     'Vulkan.Core10.Enums.Format.Format' that has a channel width less+--     than 64-bit is accessed as a result of this command, the+--     @SampledType@ of the @OpTypeImage@ operand of that instruction+--     /must/ have a @Width@ of 32.+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-sparseImageInt64Atomics-04474# If+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects+--     created with the+--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-sparseImageInt64Atomics-04475# If+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>+--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects+--     created with the+--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'+--     flag /must/ not be accessed by atomic instructions through an+--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this+--     command.+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-None-03429# Any shader group handle+--     referenced by this call /must/ have been queried from the currently+--     bound ray tracing shader pipeline+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-maxRecursionDepth-03430# This+--     command /must/ not cause a shader call instruction to be executed+--     from a shader invocation with a+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth>+--     greater than the value of @maxRecursionDepth@ used to create the+--     bound ray tracing pipeline+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-04019# If+--     @pRayGenShaderBindingTable->buffer@ is non-sparse then it /must/ be+--     bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-04020# The @offset@ member of+--     @pRayGenShaderBindingTable@ /must/ be less than the size of the+--     @pRayGenShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-04021#+--     @pRayGenShaderBindingTable->offset@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pRayGenShaderBindingTable-04022#+--     @pRayGenShaderBindingTable->offset@ ++--     @pRayGenShaderBindingTable->size@ /must/ be less than or equal to+--     the size of @pRayGenShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-size-04023# The @size@ member of+--     @pRayGenShaderBindingTable@ /must/ be equal to its @stride@ member+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-04024# If+--     @pMissShaderBindingTable->buffer@ is non-sparse then it /must/ be+--     bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-04025# The @offset@ member of+--     @pMissShaderBindingTable@ /must/ be less than the size of+--     @pMissShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-04026# The @offset@ member of+--     @pMissShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-04027#+--     @pMissShaderBindingTable->offset@ + @pMissShaderBindingTable->size@+--     /must/ be less than or equal to the size of+--     @pMissShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04028# The @stride@ member of+--     @pMissShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04029# The @stride@ member of+--     @pMissShaderBindingTable@ /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-04030# If+--     @pHitShaderBindingTable->buffer@ is non-sparse then it /must/ be+--     bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-04031# The @offset@ member of+--     @pHitShaderBindingTable@ /must/ be less than the size of+--     @pHitShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-04032# The @offset@ member of+--     @pHitShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-04033#+--     @pHitShaderBindingTable->offset@ + @pHitShaderBindingTable->size@+--     /must/ be less than or equal to the size of+--     @pHitShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04034# The @stride@ member of+--     @pHitShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04035# The @stride@ member of+--     @pHitShaderBindingTable@ /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-04036#+--     If @pCallableShaderBindingTable->buffer@ is non-sparse then it+--     /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-04037# The @offset@ member of+--     @pCallableShaderBindingTable@ /must/ be less than the size of+--     @pCallableShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-04038# The @offset@ member of+--     @pCallableShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupBaseAlignment@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-04039#+--     @pCallableShaderBindingTable->offset@ ++--     @pCallableShaderBindingTable->size@ /must/ be less than or equal to+--     the size of @pCallableShaderBindingTable->buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04040# The @stride@ member of+--     @pCallableShaderBindingTable@ /must/ be a multiple of+--     'PhysicalDeviceRayTracingPropertiesKHR'::@shaderGroupHandleSize@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-stride-04041# The @stride@ member of+--     @pCallableShaderBindingTable@ /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxShaderGroupStride@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03508# If the currently bound+--     ray tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03509# If the currently bound+--     ray tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03510# If the currently bound+--     ray tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',+--     the @buffer@ member of @pHitShaderBindingTable@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03511# If the currently bound+--     ray tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR',+--     the shader group handle identified by @pMissShaderBindingTable@+--     /must/ contain a valid miss shader+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03512# If the currently bound+--     ray tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',+--     entries in @pHitShaderBindingTable@ accessed as a result of this+--     command in order to execute an any hit shader /must/ not be set to+--     zero+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03513# If the currently bound+--     ray tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',+--     entries in @pHitShaderBindingTable@ accessed as a result of this+--     command in order to execute a closest hit shader /must/ not be set+--     to zero+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-flags-03514# If the currently bound+--     ray tracing pipeline was created with @flags@ that included+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR',+--     entries in @pHitShaderBindingTable@ accessed as a result of this+--     command in order to execute an intersection shader /must/ not be set+--     to zero+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-buffer-02708# If @buffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-buffer-02709# @buffer@ /must/ have+--     been created with the+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'+--     bit set+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-02710# @offset@ /must/ be a+--     multiple of @4@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711# @commandBuffer@+--     /must/ not be a protected command buffer+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-offset-03517# (@offset@ ++--     @sizeof@('TraceRaysIndirectCommandKHR')) /must/ be less than or+--     equal to the size of @buffer@+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-rayTracingIndirectTraceRays-03518#+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-indirecttraceray ::rayTracingIndirectTraceRays>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pRaygenShaderBindingTable-parameter#+--     @pRaygenShaderBindingTable@ /must/ be a valid pointer to a valid+--     'StridedBufferRegionKHR' structure+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pMissShaderBindingTable-parameter#+--     @pMissShaderBindingTable@ /must/ be a valid pointer to a valid+--     'StridedBufferRegionKHR' structure+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pHitShaderBindingTable-parameter#+--     @pHitShaderBindingTable@ /must/ be a valid pointer to a valid+--     'StridedBufferRegionKHR' structure+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-pCallableShaderBindingTable-parameter#+--     @pCallableShaderBindingTable@ /must/ be a valid pointer to a valid+--     'StridedBufferRegionKHR' structure+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-buffer-parameter# @buffer@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Buffer' handle+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-renderpass# This command /must/ only+--     be called outside of a render pass instance+--+-- -   #VUID-vkCmdTraceRaysIndirectKHR-commonparent# Both of @buffer@, and+--     @commandBuffer@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'StridedBufferRegionKHR'+cmdTraceRaysIndirectKHR :: forall io+                         . (MonadIO io)+                        => -- | @commandBuffer@ is the command buffer into which the command will be+                           -- recorded.+                           CommandBuffer+                        -> -- | @pRaygenShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the+                           -- shader binding table data for the ray generation shader stage.+                           ("raygenShaderBindingTable" ::: StridedBufferRegionKHR)+                        -> -- | @pMissShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the+                           -- shader binding table data for the miss shader stage.+                           ("missShaderBindingTable" ::: StridedBufferRegionKHR)+                        -> -- | @pHitShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds the+                           -- shader binding table data for the hit shader stage.+                           ("hitShaderBindingTable" ::: StridedBufferRegionKHR)+                        -> -- | @pCallableShaderBindingTable@ is a 'StridedBufferRegionKHR' that holds+                           -- the shader binding table data for the callable shader stage.+                           ("callableShaderBindingTable" ::: StridedBufferRegionKHR)+                        -> -- | @buffer@ is the buffer containing the trace ray parameters.+                           Buffer+                        -> -- | @offset@ is the byte offset into @buffer@ where parameters begin.+                           ("offset" ::: DeviceSize)+                        -> io ()+cmdTraceRaysIndirectKHR commandBuffer raygenShaderBindingTable missShaderBindingTable hitShaderBindingTable callableShaderBindingTable buffer offset = liftIO . evalContT $ do+  let vkCmdTraceRaysIndirectKHRPtr = pVkCmdTraceRaysIndirectKHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdTraceRaysIndirectKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdTraceRaysIndirectKHR is null" Nothing Nothing+  let vkCmdTraceRaysIndirectKHR' = mkVkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHRPtr+  pRaygenShaderBindingTable <- ContT $ withCStruct (raygenShaderBindingTable)+  pMissShaderBindingTable <- ContT $ withCStruct (missShaderBindingTable)+  pHitShaderBindingTable <- ContT $ withCStruct (hitShaderBindingTable)+  pCallableShaderBindingTable <- ContT $ withCStruct (callableShaderBindingTable)+  lift $ vkCmdTraceRaysIndirectKHR' (commandBufferHandle (commandBuffer)) pRaygenShaderBindingTable pMissShaderBindingTable pHitShaderBindingTable pCallableShaderBindingTable (buffer) (offset)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetDeviceAccelerationStructureCompatibilityKHR+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureVersionKHR -> IO Result++-- | vkGetDeviceAccelerationStructureCompatibilityKHR - Check if a serialized+-- acceleration structure is compatible with the current device+--+-- = Description+--+-- This possible return values for+-- 'getDeviceAccelerationStructureCompatibilityKHR' are:+--+-- -   'Vulkan.Core10.Enums.Result.SUCCESS' is returned if an acceleration+--     structure serialized with @version@ as the version information is+--     compatible with @device@.+--+-- -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_VERSION_KHR' is+--     returned if an acceleration structure serialized with @version@ as+--     the version information is not compatible with @device@.+--+-- == Valid Usage+--+-- -   #VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-rayTracing-03565#+--     The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>+--     or+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkGetDeviceAccelerationStructureCompatibilityKHR-version-parameter#+--     @version@ /must/ be a valid pointer to a valid+--     'AccelerationStructureVersionKHR' structure+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_VERSION_KHR'+--+-- = See Also+--+-- 'AccelerationStructureVersionKHR', 'Vulkan.Core10.Handles.Device'+getDeviceAccelerationStructureCompatibilityKHR :: forall io+                                                . (MonadIO io)+                                               => -- | @device@ is the device to check the version against.+                                                  Device+                                               -> -- | @version@ points to the 'AccelerationStructureVersionKHR' version+                                                  -- information to check against the device.+                                                  AccelerationStructureVersionKHR+                                               -> io ()+getDeviceAccelerationStructureCompatibilityKHR device version = liftIO . evalContT $ do+  let vkGetDeviceAccelerationStructureCompatibilityKHRPtr = pVkGetDeviceAccelerationStructureCompatibilityKHR (deviceCmds (device :: Device))+  lift $ unless (vkGetDeviceAccelerationStructureCompatibilityKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetDeviceAccelerationStructureCompatibilityKHR is null" Nothing Nothing+  let vkGetDeviceAccelerationStructureCompatibilityKHR' = mkVkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHRPtr+  version' <- ContT $ withCStruct (version)+  r <- lift $ vkGetDeviceAccelerationStructureCompatibilityKHR' (deviceHandle (device)) version'+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCreateAccelerationStructureKHR+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result) -> Ptr Device_T -> Ptr AccelerationStructureCreateInfoKHR -> Ptr AllocationCallbacks -> Ptr AccelerationStructureKHR -> IO Result++-- | vkCreateAccelerationStructureKHR - Create a new acceleration structure+-- object+--+-- = Description+--+-- Similar to other objects in Vulkan, the acceleration structure creation+-- merely creates an object with a specific “shape”. The type and quantity+-- of geometry that can be built into an acceleration structure is+-- determined by the parameters of 'AccelerationStructureCreateInfoKHR'.+--+-- Populating the data in the object after allocating and binding memory is+-- done with commands such as 'cmdBuildAccelerationStructureKHR',+-- 'buildAccelerationStructureKHR', 'cmdCopyAccelerationStructureKHR', and+-- 'copyAccelerationStructureKHR'.+--+-- The input buffers passed to acceleration structure build commands will+-- be referenced by the implementation for the duration of the command.+-- After the command completes, the acceleration structure /may/ hold a+-- reference to any acceleration structure specified by an active instance+-- contained therein. Apart from this referencing, acceleration structures+-- /must/ be fully self-contained. The application /may/ re-use or free any+-- memory which was used by the command as an input or as scratch without+-- affecting the results of ray traversal.+--+-- == Valid Usage+--+-- -   #VUID-vkCreateAccelerationStructureKHR-rayTracing-03487# The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing rayTracing>+--     or+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayQuery rayQuery>+--     feature /must/ be enabled+--+-- -   #VUID-vkCreateAccelerationStructureKHR-deviceAddress-03488# If+--     'AccelerationStructureCreateInfoKHR'::@deviceAddress@ is not zero,+--     the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-ascapturereplay rayTracingAccelerationStructureCaptureReplay>+--     feature /must/ be enabled+--+-- -   #VUID-vkCreateAccelerationStructureKHR-device-03489# If @device@ was+--     created with multiple physical devices, then the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCreateAccelerationStructureKHR-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkCreateAccelerationStructureKHR-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid+--     'AccelerationStructureCreateInfoKHR' structure+--+-- -   #VUID-vkCreateAccelerationStructureKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure+--+-- -   #VUID-vkCreateAccelerationStructureKHR-pAccelerationStructure-parameter#+--     @pAccelerationStructure@ /must/ be a valid pointer to a+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'+--+-- = See Also+--+-- 'AccelerationStructureCreateInfoKHR',+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',+-- 'Vulkan.Core10.Handles.Device'+createAccelerationStructureKHR :: forall io+                                . (MonadIO io)+                               => -- | @device@ is the logical device that creates the buffer object.+                                  Device+                               -> -- | @pCreateInfo@ is a pointer to a 'AccelerationStructureCreateInfoKHR'+                                  -- structure containing parameters affecting creation of the acceleration+                                  -- structure.+                                  AccelerationStructureCreateInfoKHR+                               -> -- | @pAllocator@ controls host memory allocation as described in the+                                  -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-allocation Memory Allocation>+                                  -- chapter.+                                  ("allocator" ::: Maybe AllocationCallbacks)+                               -> io (AccelerationStructureKHR)+createAccelerationStructureKHR device createInfo allocator = liftIO . evalContT $ do+  let vkCreateAccelerationStructureKHRPtr = pVkCreateAccelerationStructureKHR (deviceCmds (device :: Device))+  lift $ unless (vkCreateAccelerationStructureKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCreateAccelerationStructureKHR is null" Nothing Nothing+  let vkCreateAccelerationStructureKHR' = mkVkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHRPtr+  pCreateInfo <- ContT $ withCStruct (createInfo)+  pAllocator <- case (allocator) of+    Nothing -> pure nullPtr+    Just j -> ContT $ withCStruct (j)+  pPAccelerationStructure <- ContT $ bracket (callocBytes @AccelerationStructureKHR 8) free+  r <- lift $ vkCreateAccelerationStructureKHR' (deviceHandle (device)) pCreateInfo pAllocator (pPAccelerationStructure)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pAccelerationStructure <- lift $ peek @AccelerationStructureKHR pPAccelerationStructure+  pure $ (pAccelerationStructure)++-- | A convenience wrapper to make a compatible pair of calls to+-- 'createAccelerationStructureKHR' and 'destroyAccelerationStructureKHR'+--+-- To ensure that 'destroyAccelerationStructureKHR' is always called: pass+-- 'Control.Exception.bracket' (or the allocate function from your+-- favourite resource management library) as the first argument.+-- To just extract the pair pass '(,)' as the first argument.+--+withAccelerationStructureKHR :: forall io r . MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> Maybe AllocationCallbacks -> (io (AccelerationStructureKHR) -> ((AccelerationStructureKHR) -> io ()) -> r) -> r+withAccelerationStructureKHR device pCreateInfo pAllocator b =+  b (createAccelerationStructureKHR device pCreateInfo pAllocator)+    (\(o0) -> destroyAccelerationStructureKHR device o0 pAllocator)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBuildAccelerationStructureKHR+  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO ()++-- | vkCmdBuildAccelerationStructureKHR - Build an acceleration structure+--+-- = Description+--+-- The 'cmdBuildAccelerationStructureKHR' command provides the ability to+-- initiate multiple acceleration structures builds, however there is no+-- ordering or synchronization implied between any of the individual+-- acceleration structure builds.+--+-- Note+--+-- This means that an application /cannot/ build a top-level acceleration+-- structure in the same 'cmdBuildAccelerationStructureKHR' call as the+-- associated bottom-level or instance acceleration structures are being+-- built. There also /cannot/ be any memory aliasing between any+-- acceleration structure memories or scratch memories being used by any of+-- the builds.+--+-- Accesses to the acceleration structure scratch buffers as identified by+-- the 'AccelerationStructureBuildGeometryInfoKHR'→@scratchData@ buffer+-- device addresses /must/ be+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-dependencies synchronized>+-- with the+-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR'+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages pipeline stage>+-- and an+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-access-types access type>+-- of+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR'+-- or+-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR'.+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pOffsetInfos-03402# Each+--     element of @ppOffsetInfos@[i] /must/ be a valid pointer to an array+--     of @pInfos@[i].@geometryCount@+--     'AccelerationStructureBuildOffsetInfoKHR' structures+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03403# Each+--     @pInfos@[i].@srcAccelerationStructure@ /must/ not refer to the same+--     acceleration structure as any @pInfos@[i].@dstAccelerationStructure@+--     that is provided to the same build command unless it is identical+--     for an update+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03404# For each+--     @pInfos@[i], @dstAccelerationStructure@ /must/ have been created+--     with compatible 'AccelerationStructureCreateInfoKHR' where+--     'AccelerationStructureCreateInfoKHR'::@type@ and+--     'AccelerationStructureCreateInfoKHR'::@flags@ are identical to+--     'AccelerationStructureBuildGeometryInfoKHR'::@type@ and+--     'AccelerationStructureBuildGeometryInfoKHR'::@flags@ respectively,+--     'AccelerationStructureBuildGeometryInfoKHR'::@geometryCount@ for+--     @dstAccelerationStructure@ are greater than or equal to the build+--     size, and each geometry in+--     'AccelerationStructureBuildGeometryInfoKHR'::@ppGeometries@ for+--     @dstAccelerationStructure@ has greater than or equal to the number+--     of vertices, indices, and AABBs,+--     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ is+--     both 0 or both non-zero, and all other parameters are the same+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03405# For each+--     @pInfos@[i], if @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     then objects that were previously active for that acceleration+--     structure /must/ not be made inactive as per+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03406# For each+--     @pInfos@[i], if @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     then objects that were previously inactive for that acceleration+--     structure /must/ not be made active as per+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-None-03407# Any+--     acceleration structure instance in any top level build in this+--     command /must/ not reference any bottom level acceleration structure+--     built by this command+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03408# There /must/+--     not be any+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>+--     between the scratch memories that are provided in all the+--     @pInfos@[i].@scratchData@ memories for the acceleration structure+--     builds+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-None-03409# There /must/+--     not be any+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>+--     between memory bound to any top level, bottom level, or instance+--     acceleration structure accessed by this command+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-update-03527# If @update@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE', all addresses between+--     @pInfos@[i].@scratchData@ and @pInfos@[i].@scratchData@ + N - 1+--     /must/ be in the buffer device address range of the same buffer,+--     where N is given by the @size@ member of the+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure+--     returned from a call to+--     'getAccelerationStructureMemoryRequirementsKHR' with+--     'AccelerationStructureMemoryRequirementsInfoKHR'::@accelerationStructure@+--     set to @pInfos@[i].@dstAccelerationStructure@ and+--     'AccelerationStructureMemoryRequirementsInfoKHR'::@type@ set to+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR'+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-update-03528# If @update@+--     is 'Vulkan.Core10.FundamentalTypes.TRUE', all addresses between+--     @pInfos@[i].@scratchData@ and @pInfos@[i].@scratchData@ + N - 1+--     /must/ be in the buffer device address range of the same buffer,+--     where N is given by the @size@ member of the+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure+--     returned from a call to+--     'getAccelerationStructureMemoryRequirementsKHR' with+--     'AccelerationStructureMemoryRequirementsInfoKHR'::@accelerationStructure@+--     set to @pInfos@[i].@dstAccelerationStructure@ and+--     'AccelerationStructureMemoryRequirementsInfoKHR'::@type@ set to+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR'+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pInfos-03529# The buffer+--     from which the buffer device address @pInfos@[i].@scratchData@ is+--     queried /must/ have been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_RAY_TRACING_BIT_KHR'+--     usage flag+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-None-04046# All+--     'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR' referenced+--     by this command /must/ contain valid device addresses for a buffer+--     bound to device memory. If the buffer is non-sparse then it /must/+--     be bound completely and contiguously to a single VkDeviceMemory+--     object+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-None-03531# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to device memory+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pNext-03532# The+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--     structure /must/ not be included in the @pNext@ chain of any of the+--     provided 'AccelerationStructureBuildGeometryInfoKHR' structures+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-pInfos-parameter# @pInfos@+--     /must/ be a valid pointer to an array of @infoCount@ valid+--     'AccelerationStructureBuildGeometryInfoKHR' structures+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-ppOffsetInfos-parameter#+--     @ppOffsetInfos@ /must/ be a valid pointer to an array of @infoCount@+--     'AccelerationStructureBuildOffsetInfoKHR' structures+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-renderpass# This command+--     /must/ only be called outside of a render pass instance+--+-- -   #VUID-vkCmdBuildAccelerationStructureKHR-infoCount-arraylength#+--     @infoCount@ /must/ be greater than @0@+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'AccelerationStructureBuildGeometryInfoKHR',+-- 'AccelerationStructureBuildOffsetInfoKHR',+-- 'Vulkan.Core10.Handles.CommandBuffer'+cmdBuildAccelerationStructureKHR :: forall io+                                  . (MonadIO io)+                                 => -- | @commandBuffer@ is the command buffer into which the command will be+                                    -- recorded.+                                    CommandBuffer+                                 -> -- | @pInfos@ is an array of @infoCount@+                                    -- 'AccelerationStructureBuildGeometryInfoKHR' structures defining the+                                    -- geometry used to build each acceleration structure.+                                    ("infos" ::: Vector (SomeStruct AccelerationStructureBuildGeometryInfoKHR))+                                 -> -- | @ppOffsetInfos@ is an array of @infoCount@ pointers to arrays of+                                    -- 'AccelerationStructureBuildOffsetInfoKHR' structures. Each+                                    -- @ppOffsetInfos@[i] is an array of @pInfos@[i].@geometryCount@+                                    -- 'AccelerationStructureBuildOffsetInfoKHR' structures defining dynamic+                                    -- offsets to the addresses where geometry data is stored, as defined by+                                    -- @pInfos@[i].+                                    ("offsetInfos" ::: Vector AccelerationStructureBuildOffsetInfoKHR)+                                 -> io ()+cmdBuildAccelerationStructureKHR commandBuffer infos offsetInfos = liftIO . evalContT $ do+  let vkCmdBuildAccelerationStructureKHRPtr = pVkCmdBuildAccelerationStructureKHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdBuildAccelerationStructureKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBuildAccelerationStructureKHR is null" Nothing Nothing+  let vkCmdBuildAccelerationStructureKHR' = mkVkCmdBuildAccelerationStructureKHR vkCmdBuildAccelerationStructureKHRPtr+  let pInfosLength = Data.Vector.length $ (infos)+  lift $ unless ((Data.Vector.length $ (offsetInfos)) == pInfosLength) $+    throwIO $ IOError Nothing InvalidArgument "" "ppOffsetInfos and pInfos must have the same length" Nothing Nothing+  pPInfos <- ContT $ allocaBytesAligned @(AccelerationStructureBuildGeometryInfoKHR _) ((Data.Vector.length (infos)) * 72) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInfos `plusPtr` (72 * (i)) :: Ptr (AccelerationStructureBuildGeometryInfoKHR _))) (e) . ($ ())) (infos)+  pPpOffsetInfos <- ContT $ allocaBytesAligned @(Ptr AccelerationStructureBuildOffsetInfoKHR) ((Data.Vector.length (offsetInfos)) * 8) 8+  Data.Vector.imapM_ (\i e -> do+    ppOffsetInfos <- ContT $ withCStruct (e)+    lift $ poke (pPpOffsetInfos `plusPtr` (8 * (i)) :: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) ppOffsetInfos) (offsetInfos)+  lift $ vkCmdBuildAccelerationStructureKHR' (commandBufferHandle (commandBuffer)) ((fromIntegral pInfosLength :: Word32)) (forgetExtensions (pPInfos)) (pPpOffsetInfos)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdBuildAccelerationStructureIndirectKHR+  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Buffer -> DeviceSize -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Buffer -> DeviceSize -> Word32 -> IO ()++-- | vkCmdBuildAccelerationStructureIndirectKHR - Build an acceleration+-- structure with some parameters provided on the device+--+-- == Valid Usage+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-None-04047# All+--     'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR' referenced+--     by this command /must/ contain valid device addresses for a buffer+--     bound to device memory. If the buffer is non-sparse then it /must/+--     be bound completely and contiguously to a single VkDeviceMemory+--     object+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-None-03534# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to device memory+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-rayTracingIndirectAccelerationStructureBuild-03535#+--     The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-indirectasbuild ::rayTracingIndirectAccelerationStructureBuild>+--     feature /must/ be enabled+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-pNext-03536# The+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--     structure /must/ not be included in the @pNext@ chain of any of the+--     provided 'AccelerationStructureBuildGeometryInfoKHR' structures+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-pInfo-parameter#+--     @pInfo@ /must/ be a valid pointer to a valid+--     'AccelerationStructureBuildGeometryInfoKHR' structure+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-indirectBuffer-parameter#+--     @indirectBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'+--     handle+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-commandBuffer-cmdpool#+--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support compute operations+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-renderpass# This+--     command /must/ only be called outside of a render pass instance+--+-- -   #VUID-vkCmdBuildAccelerationStructureIndirectKHR-commonparent# Both+--     of @commandBuffer@, and @indirectBuffer@ /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Outside                                                                                                                | Compute                                                                                                               |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'AccelerationStructureBuildGeometryInfoKHR',+-- 'Vulkan.Core10.Handles.Buffer', 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize'+cmdBuildAccelerationStructureIndirectKHR :: forall a io+                                          . (Extendss AccelerationStructureBuildGeometryInfoKHR a, PokeChain a, MonadIO io)+                                         => -- | @commandBuffer@ is the command buffer into which the command will be+                                            -- recorded.+                                            CommandBuffer+                                         -> -- | @pInfo@ is a pointer to a 'AccelerationStructureBuildGeometryInfoKHR'+                                            -- structure defining the geometry used to build the acceleration+                                            -- structure.+                                            (AccelerationStructureBuildGeometryInfoKHR a)+                                         -> -- | @indirectBuffer@ is the 'Vulkan.Core10.Handles.Buffer' containing+                                            -- @pInfo->geometryCount@ 'AccelerationStructureBuildOffsetInfoKHR'+                                            -- structures defining dynamic offsets to the addresses where geometry data+                                            -- is stored, as defined by @pInfo@.+                                            ("indirectBuffer" ::: Buffer)+                                         -> -- | @indirectOffset@ is the byte offset into @indirectBuffer@ where offset+                                            -- parameters begin.+                                            ("indirectOffset" ::: DeviceSize)+                                         -> -- No documentation found for Nested "vkCmdBuildAccelerationStructureIndirectKHR" "indirectStride"+                                            ("indirectStride" ::: Word32)+                                         -> io ()+cmdBuildAccelerationStructureIndirectKHR commandBuffer info indirectBuffer indirectOffset indirectStride = liftIO . evalContT $ do+  let vkCmdBuildAccelerationStructureIndirectKHRPtr = pVkCmdBuildAccelerationStructureIndirectKHR (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdBuildAccelerationStructureIndirectKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdBuildAccelerationStructureIndirectKHR is null" Nothing Nothing+  let vkCmdBuildAccelerationStructureIndirectKHR' = mkVkCmdBuildAccelerationStructureIndirectKHR vkCmdBuildAccelerationStructureIndirectKHRPtr+  pInfo <- ContT $ withCStruct (info)+  lift $ vkCmdBuildAccelerationStructureIndirectKHR' (commandBufferHandle (commandBuffer)) (forgetExtensions pInfo) (indirectBuffer) (indirectOffset) (indirectStride)+  pure $ ()+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkBuildAccelerationStructureKHR+  :: FunPtr (Ptr Device_T -> Word32 -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO Result) -> Ptr Device_T -> Word32 -> Ptr (SomeStruct AccelerationStructureBuildGeometryInfoKHR) -> Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR) -> IO Result++-- | vkBuildAccelerationStructureKHR - Build an acceleration structure on the+-- host+--+-- = Parameters+--+-- This command fulfills the same task as+-- 'cmdBuildAccelerationStructureKHR' but executed by the host.+--+-- = Description+--+-- -   @device@ is the 'Vulkan.Core10.Handles.Device' for which the+--     acceleration structures are being built.+--+-- -   @infoCount@ is the number of acceleration structures to build. It+--     specifies the number of the @pInfos@ structures and @ppOffsetInfos@+--     pointers that /must/ be provided.+--+-- -   @pInfos@ is a pointer to an array of @infoCount@+--     'AccelerationStructureBuildGeometryInfoKHR' structures defining the+--     geometry used to build each acceleration structure.+--+-- -   @ppOffsetInfos@ is an array of @infoCount@ pointers to arrays of+--     'AccelerationStructureBuildOffsetInfoKHR' structures. Each+--     @ppOffsetInfos@[i] is an array of @pInfos@[i].@geometryCount@+--     'AccelerationStructureBuildOffsetInfoKHR' structures defining+--     dynamic offsets to the addresses where geometry data is stored, as+--     defined by @pInfos@[i].+--+-- The 'buildAccelerationStructureKHR' command provides the ability to+-- initiate multiple acceleration structures builds, however there is no+-- ordering or synchronization implied between any of the individual+-- acceleration structure builds.+--+-- Note+--+-- This means that an application /cannot/ build a top-level acceleration+-- structure in the same 'buildAccelerationStructureKHR' call as the+-- associated bottom-level or instance acceleration structures are being+-- built. There also /cannot/ be any memory aliasing between any+-- acceleration structure memories or scratch memories being used by any of+-- the builds.+--+-- If the+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+-- structure is included in the @pNext@ chain of any+-- 'AccelerationStructureBuildGeometryInfoKHR' structure, the operation of+-- this command is /deferred/, as defined in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>+-- chapter.+--+-- == Valid Usage+--+-- -   #VUID-vkBuildAccelerationStructureKHR-pOffsetInfos-03402# Each+--     element of @ppOffsetInfos@[i] /must/ be a valid pointer to an array+--     of @pInfos@[i].@geometryCount@+--     'AccelerationStructureBuildOffsetInfoKHR' structures+--+-- -   #VUID-vkBuildAccelerationStructureKHR-pInfos-03403# Each+--     @pInfos@[i].@srcAccelerationStructure@ /must/ not refer to the same+--     acceleration structure as any @pInfos@[i].@dstAccelerationStructure@+--     that is provided to the same build command unless it is identical+--     for an update+--+-- -   #VUID-vkBuildAccelerationStructureKHR-pInfos-03404# For each+--     @pInfos@[i], @dstAccelerationStructure@ /must/ have been created+--     with compatible 'AccelerationStructureCreateInfoKHR' where+--     'AccelerationStructureCreateInfoKHR'::@type@ and+--     'AccelerationStructureCreateInfoKHR'::@flags@ are identical to+--     'AccelerationStructureBuildGeometryInfoKHR'::@type@ and+--     'AccelerationStructureBuildGeometryInfoKHR'::@flags@ respectively,+--     'AccelerationStructureBuildGeometryInfoKHR'::@geometryCount@ for+--     @dstAccelerationStructure@ are greater than or equal to the build+--     size, and each geometry in+--     'AccelerationStructureBuildGeometryInfoKHR'::@ppGeometries@ for+--     @dstAccelerationStructure@ has greater than or equal to the number+--     of vertices, indices, and AABBs,+--     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@ is+--     both 0 or both non-zero, and all other parameters are the same+--+-- -   #VUID-vkBuildAccelerationStructureKHR-pInfos-03405# For each+--     @pInfos@[i], if @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     then objects that were previously active for that acceleration+--     structure /must/ not be made inactive as per+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>+--+-- -   #VUID-vkBuildAccelerationStructureKHR-pInfos-03406# For each+--     @pInfos@[i], if @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     then objects that were previously inactive for that acceleration+--     structure /must/ not be made active as per+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims ???>+--+-- -   #VUID-vkBuildAccelerationStructureKHR-None-03407# Any acceleration+--     structure instance in any top level build in this command /must/ not+--     reference any bottom level acceleration structure built by this+--     command+--+-- -   #VUID-vkBuildAccelerationStructureKHR-pInfos-03408# There /must/ not+--     be any+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>+--     between the scratch memories that are provided in all the+--     @pInfos@[i].@scratchData@ memories for the acceleration structure+--     builds+--+-- -   #VUID-vkBuildAccelerationStructureKHR-None-03409# There /must/ not+--     be any+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>+--     between memory bound to any top level, bottom level, or instance+--     acceleration structure accessed by this command+--+-- -   #VUID-vkBuildAccelerationStructureKHR-None-03437# All+--     'DeviceOrHostAddressKHR' or 'DeviceOrHostAddressConstKHR' referenced+--     by this command /must/ contain valid host addresses+--+-- -   #VUID-vkBuildAccelerationStructureKHR-None-03438# All+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' objects+--     referenced by this command /must/ be bound to host-visible memory+--+-- -   #VUID-vkBuildAccelerationStructureKHR-rayTracingHostAccelerationStructureCommands-03439#+--     The+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-hostascmds ::rayTracingHostAccelerationStructureCommands>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkBuildAccelerationStructureKHR-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkBuildAccelerationStructureKHR-pInfos-parameter# @pInfos@+--     /must/ be a valid pointer to an array of @infoCount@ valid+--     'AccelerationStructureBuildGeometryInfoKHR' structures+--+-- -   #VUID-vkBuildAccelerationStructureKHR-ppOffsetInfos-parameter#+--     @ppOffsetInfos@ /must/ be a valid pointer to an array of @infoCount@+--     'AccelerationStructureBuildOffsetInfoKHR' structures+--+-- -   #VUID-vkBuildAccelerationStructureKHR-infoCount-arraylength#+--     @infoCount@ /must/ be greater than @0@+--+-- == Return Codes+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]+--+--     -   'Vulkan.Core10.Enums.Result.SUCCESS'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_DEFERRED_KHR'+--+--     -   'Vulkan.Core10.Enums.Result.OPERATION_NOT_DEFERRED_KHR'+--+-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'+--+--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'+--+-- = See Also+--+-- 'AccelerationStructureBuildGeometryInfoKHR',+-- 'AccelerationStructureBuildOffsetInfoKHR',+-- 'Vulkan.Core10.Handles.Device'+buildAccelerationStructureKHR :: forall io+                               . (MonadIO io)+                              => -- No documentation found for Nested "vkBuildAccelerationStructureKHR" "device"+                                 Device+                              -> -- No documentation found for Nested "vkBuildAccelerationStructureKHR" "pInfos"+                                 ("infos" ::: Vector (SomeStruct AccelerationStructureBuildGeometryInfoKHR))+                              -> -- No documentation found for Nested "vkBuildAccelerationStructureKHR" "ppOffsetInfos"+                                 ("offsetInfos" ::: Vector AccelerationStructureBuildOffsetInfoKHR)+                              -> io (Result)+buildAccelerationStructureKHR device infos offsetInfos = liftIO . evalContT $ do+  let vkBuildAccelerationStructureKHRPtr = pVkBuildAccelerationStructureKHR (deviceCmds (device :: Device))+  lift $ unless (vkBuildAccelerationStructureKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkBuildAccelerationStructureKHR is null" Nothing Nothing+  let vkBuildAccelerationStructureKHR' = mkVkBuildAccelerationStructureKHR vkBuildAccelerationStructureKHRPtr+  let pInfosLength = Data.Vector.length $ (infos)+  lift $ unless ((Data.Vector.length $ (offsetInfos)) == pInfosLength) $+    throwIO $ IOError Nothing InvalidArgument "" "ppOffsetInfos and pInfos must have the same length" Nothing Nothing+  pPInfos <- ContT $ allocaBytesAligned @(AccelerationStructureBuildGeometryInfoKHR _) ((Data.Vector.length (infos)) * 72) 8+  Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPInfos `plusPtr` (72 * (i)) :: Ptr (AccelerationStructureBuildGeometryInfoKHR _))) (e) . ($ ())) (infos)+  pPpOffsetInfos <- ContT $ allocaBytesAligned @(Ptr AccelerationStructureBuildOffsetInfoKHR) ((Data.Vector.length (offsetInfos)) * 8) 8+  Data.Vector.imapM_ (\i e -> do+    ppOffsetInfos <- ContT $ withCStruct (e)+    lift $ poke (pPpOffsetInfos `plusPtr` (8 * (i)) :: Ptr (Ptr AccelerationStructureBuildOffsetInfoKHR)) ppOffsetInfos) (offsetInfos)+  r <- lift $ vkBuildAccelerationStructureKHR' (deviceHandle (device)) ((fromIntegral pInfosLength :: Word32)) (forgetExtensions (pPInfos)) (pPpOffsetInfos)+  lift $ when (r < SUCCESS) (throwIO (VulkanException r))+  pure $ (r)+++foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkGetAccelerationStructureDeviceAddressKHR+  :: FunPtr (Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress) -> Ptr Device_T -> Ptr AccelerationStructureDeviceAddressInfoKHR -> IO DeviceAddress++-- | vkGetAccelerationStructureDeviceAddressKHR - Query an address of a+-- acceleration structure+--+-- = Description+--+-- The 64-bit return value is an address of the acceleration structure,+-- which can be used for device and shader operations that involve+-- acceleration structures, such as ray traversal and acceleration+-- structure building.+--+-- If the acceleration structure was created with a non-zero value of+-- 'AccelerationStructureCreateInfoKHR'::@deviceAddress@ the return value+-- will be the same address.+--+-- == Valid Usage+--+-- -   #VUID-vkGetAccelerationStructureDeviceAddressKHR-device-03504# If+--     @device@ was created with multiple physical devices, then the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-bufferDeviceAddressMultiDevice bufferDeviceAddressMultiDevice>+--     feature /must/ be enabled+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkGetAccelerationStructureDeviceAddressKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+--+-- -   #VUID-vkGetAccelerationStructureDeviceAddressKHR-pInfo-parameter#+--     @pInfo@ /must/ be a valid pointer to a valid+--     'AccelerationStructureDeviceAddressInfoKHR' structure+--+-- = See Also+--+-- 'AccelerationStructureDeviceAddressInfoKHR',+-- 'Vulkan.Core10.Handles.Device'+getAccelerationStructureDeviceAddressKHR :: forall io+                                          . (MonadIO io)+                                         => -- | @device@ is the logical device that the accelerationStructure was+                                            -- created on.+                                            Device+                                         -> -- | @pInfo@ is a pointer to a 'AccelerationStructureDeviceAddressInfoKHR'+                                            -- structure specifying the acceleration structure to retrieve an address+                                            -- for.+                                            AccelerationStructureDeviceAddressInfoKHR+                                         -> io (DeviceAddress)+getAccelerationStructureDeviceAddressKHR device info = liftIO . evalContT $ do+  let vkGetAccelerationStructureDeviceAddressKHRPtr = pVkGetAccelerationStructureDeviceAddressKHR (deviceCmds (device :: Device))+  lift $ unless (vkGetAccelerationStructureDeviceAddressKHRPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetAccelerationStructureDeviceAddressKHR is null" Nothing Nothing+  let vkGetAccelerationStructureDeviceAddressKHR' = mkVkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHRPtr+  pInfo <- ContT $ withCStruct (info)+  r <- lift $ vkGetAccelerationStructureDeviceAddressKHR' (deviceHandle (device)) pInfo+  pure $ (r)+++-- | VkRayTracingShaderGroupCreateInfoKHR - Structure specifying shaders in a+-- shader group+--+-- == Valid Usage+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03474# If @type@ is+--     'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then @generalShader@+--     /must/ be a valid index into+--     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader+--     of+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR',+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MISS_BIT_KHR',+--     or+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CALLABLE_BIT_KHR'+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03475# If @type@ is+--     'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR' then @closestHitShader@,+--     @anyHitShader@, and @intersectionShader@ /must/ be+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03476# If @type@ is+--     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR' then+--     @intersectionShader@ /must/ be a valid index into+--     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader+--     of+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_INTERSECTION_BIT_KHR'+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-03477# If @type@ is+--     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' then+--     @intersectionShader@ /must/ be+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-closestHitShader-03478#+--     @closestHitShader@ /must/ be either+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid index into+--     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader+--     of+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_CLOSEST_HIT_BIT_KHR'+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-anyHitShader-03479#+--     @anyHitShader@ /must/ be either+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' or a valid index into+--     'RayTracingPipelineCreateInfoKHR'::@pStages@ referring to a shader+--     of+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ANY_HIT_BIT_KHR'+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingShaderGroupHandleCaptureReplayMixed-03480#+--     If+--     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplayMixed@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE' then+--     @pShaderGroupCaptureReplayHandle@ /must/ not be provided if it has+--     not been provided on a previous call to ray tracing pipeline+--     creation+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-rayTracingShaderGroupHandleCaptureReplayMixed-03481#+--     If+--     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplayMixed@+--     is 'Vulkan.Core10.FundamentalTypes.FALSE' then the caller /must/+--     guarantee that no ray tracing pipeline creation commands with+--     @pShaderGroupCaptureReplayHandle@ provided execute simultaneously+--     with ray tracing pipeline creation commands without+--     @pShaderGroupCaptureReplayHandle@ provided+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR'+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-pNext-pNext# @pNext@+--     /must/ be @NULL@+--+-- -   #VUID-VkRayTracingShaderGroupCreateInfoKHR-type-parameter# @type@+--     /must/ be a valid 'RayTracingShaderGroupTypeKHR' value+--+-- = See Also+--+-- 'RayTracingPipelineCreateInfoKHR', 'RayTracingShaderGroupTypeKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data RayTracingShaderGroupCreateInfoKHR = RayTracingShaderGroupCreateInfoKHR+  { -- | @type@ is the type of hit group specified in this structure.+    type' :: RayTracingShaderGroupTypeKHR+  , -- | @generalShader@ is the index of the ray generation, miss, or callable+    -- shader from 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if+    -- the shader group has @type@ of+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR', and+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.+    generalShader :: Word32+  , -- | @closestHitShader@ is the optional index of the closest hit shader from+    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader+    -- group has @type@ of+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.+    closestHitShader :: Word32+  , -- | @anyHitShader@ is the optional index of the any-hit shader from+    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader+    -- group has @type@ of+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.+    anyHitShader :: Word32+  , -- | @intersectionShader@ is the index of the intersection shader from+    -- 'RayTracingPipelineCreateInfoKHR'::@pStages@ in the group if the shader+    -- group has @type@ of+    -- 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', and+    -- 'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR' otherwise.+    intersectionShader :: Word32+  , -- | @pShaderGroupCaptureReplayHandle@ is an optional pointer to replay+    -- information for this shader group. Ignored if+    -- 'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingShaderGroupHandleCaptureReplay@+    -- is 'Vulkan.Core10.FundamentalTypes.FALSE'.+    shaderGroupCaptureReplayHandle :: Ptr ()+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (RayTracingShaderGroupCreateInfoKHR)+#endif+deriving instance Show RayTracingShaderGroupCreateInfoKHR++instance ToCStruct RayTracingShaderGroupCreateInfoKHR where+  withCStruct x f = allocaBytesAligned 48 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p RayTracingShaderGroupCreateInfoKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (type')+    poke ((p `plusPtr` 20 :: Ptr Word32)) (generalShader)+    poke ((p `plusPtr` 24 :: Ptr Word32)) (closestHitShader)+    poke ((p `plusPtr` 28 :: Ptr Word32)) (anyHitShader)+    poke ((p `plusPtr` 32 :: Ptr Word32)) (intersectionShader)+    poke ((p `plusPtr` 40 :: Ptr (Ptr ()))) (shaderGroupCaptureReplayHandle)+    f+  cStructSize = 48+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR)) (zero)+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)+    f++instance FromCStruct RayTracingShaderGroupCreateInfoKHR where+  peekCStruct p = do+    type' <- peek @RayTracingShaderGroupTypeKHR ((p `plusPtr` 16 :: Ptr RayTracingShaderGroupTypeKHR))+    generalShader <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    closestHitShader <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))+    anyHitShader <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))+    intersectionShader <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))+    pShaderGroupCaptureReplayHandle <- peek @(Ptr ()) ((p `plusPtr` 40 :: Ptr (Ptr ())))+    pure $ RayTracingShaderGroupCreateInfoKHR+             type' generalShader closestHitShader anyHitShader intersectionShader pShaderGroupCaptureReplayHandle++instance Storable RayTracingShaderGroupCreateInfoKHR where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero RayTracingShaderGroupCreateInfoKHR where+  zero = RayTracingShaderGroupCreateInfoKHR+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkRayTracingPipelineCreateInfoKHR - Structure specifying parameters of a+-- newly created ray tracing pipeline+--+-- = Description+--+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are+-- described in more detail in+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.+--+-- When+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR'+-- is specified, this pipeline defines a /pipeline library/ which /cannot/+-- be bound as a ray tracing pipeline directly. Instead, pipeline libraries+-- define common shaders and shader groups which /can/ be included in+-- future pipeline creation.+--+-- If pipeline libraries are included in @libraries@, shaders defined in+-- those libraries are treated as if they were defined as additional+-- entries in @pStages@, appended in the order they appear in the+-- @pLibraries@ array and in the @pStages@ array when those libraries were+-- defined.+--+-- When referencing shader groups in order to obtain a shader group handle,+-- groups defined in those libraries are treated as if they were defined as+-- additional entries in @pGroups@, appended in the order they appear in+-- the @pLibraries@ array and in the @pGroups@ array when those libraries+-- were defined. The shaders these groups reference are set when the+-- pipeline library is created, referencing those specified in the pipeline+-- library, not in the pipeline that includes it.+--+-- If the+-- 'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+-- structure is included in the @pNext@ chain of+-- 'RayTracingPipelineCreateInfoKHR', the operation of this pipeline+-- creation is /deferred/, as defined in the+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#deferred-host-operations Deferred Host Operations>+-- chapter.+--+-- == Valid Usage+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03421# If @flags@+--     contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineIndex@ is @-1@, @basePipelineHandle@ /must/+--     be a valid handle to a ray tracing 'Vulkan.Core10.Handles.Pipeline'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03422# If @flags@+--     contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineHandle@ is+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/+--     be a valid index into the calling command’s @pCreateInfos@ parameter+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03423# If @flags@+--     contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineIndex@ is not @-1@, @basePipelineHandle@+--     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03424# If @flags@+--     contains the+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'+--     flag, and @basePipelineHandle@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/+--     be @-1@+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-stage-03425# The @stage@+--     member of at least one element of @pStages@ /must/ be+--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pStages-03426# The shader+--     code for the entry points identified by @pStages@, and the rest of+--     the state identified by this structure /must/ adhere to the pipeline+--     linking rules described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces>+--     chapter+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-layout-03427# @layout@+--     /must/ be+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>+--     with all shaders specified in @pStages@+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-layout-03428# The number of+--     resources in @layout@ accessible to each shader stage that is used+--     by the pipeline /must/ be less than or equal to+--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-02904# @flags@ /must/+--     not include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pipelineCreationCacheControl-02905#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>+--     feature is not enabled, @flags@ /must/ not include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'+--     or+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-maxRecursionDepth-03464#+--     @maxRecursionDepth@ /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxRecursionDepth@+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03465# If @flags@+--     includes+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR',+--     @pLibraryInterface@ /must/ not be @NULL@+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-libraryCount-03466# If the+--     @libraryCount@ member of @libraries@ is greater than @0@,+--     @pLibraryInterface@ /must/ not be @NULL@+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03467# Each+--     element of the @pLibraries@ member of @libraries@ /must/ have been+--     created with the value of @maxRecursionDepth@ equal to that in this+--     pipeline+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03468# Each+--     element of the @pLibraries@ member of @libraries@ /must/ have been+--     created with a @layout@ that is compatible with the @layout@ in this+--     pipeline+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraries-03469# Each+--     element of the @pLibraries@ member of @libraries@ /must/ have been+--     created with values of the @maxPayloadSize@, @maxAttributeSize@, and+--     @maxCallableSize@ members of @pLibraryInterface@ equal to those in+--     this pipeline+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03470# If @flags@+--     includes+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR',+--     for any element of @pGroups@ with a @type@ of+--     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or+--     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the+--     @anyHitShader@ of that element /must/ not be+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-03471# If @flags@+--     includes+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR',+--     for any element of @pGroups@ with a @type@ of+--     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR' or+--     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR', the+--     @closestHitShader@ of that element /must/ not be+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_KHR'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPrimitiveCulling-03472#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPrimitiveCulling rayTracingPrimitiveCulling>+--     feature is not enabled, @flags@ /must/ not include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-rayTracingPrimitiveCulling-03473#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-rayTracingPrimitiveCulling rayTracingPrimitiveCulling>+--     feature is not enabled, @flags@ /must/ not include+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-libraries-02958# If+--     @libraries.libraryCount@ is zero, then @stageCount@ /must/ not be+--     zero+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-libraries-02959# If+--     @libraries.libraryCount@ is zero, then @groupCount@ /must/ not be+--     zero+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-sType-sType# @sType@ /must/+--     be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pNext-pNext# 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+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--     or+--     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT'+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-flags-parameter# @flags@+--     /must/ be a valid combination of+--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'+--     values+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pStages-parameter# If+--     @stageCount@ is not @0@, @pStages@ /must/ be a valid pointer to an+--     array of @stageCount@ valid+--     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pGroups-parameter# If+--     @groupCount@ is not @0@, @pGroups@ /must/ be a valid pointer to an+--     array of @groupCount@ valid 'RayTracingShaderGroupCreateInfoKHR'+--     structures+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-libraries-parameter#+--     @libraries@ /must/ be a valid+--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'+--     structure+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-pLibraryInterface-parameter#+--     If @pLibraryInterface@ is not @NULL@, @pLibraryInterface@ /must/ be+--     a valid pointer to a valid+--     'RayTracingPipelineInterfaceCreateInfoKHR' structure+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-layout-parameter# @layout@+--     /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle+--+-- -   #VUID-VkRayTracingPipelineCreateInfoKHR-commonparent# Both of+--     @basePipelineHandle@, and @layout@ that are valid handles of+--     non-ignored parameters /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Pipeline',+-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',+-- 'Vulkan.Core10.Handles.PipelineLayout',+-- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',+-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',+-- 'RayTracingPipelineInterfaceCreateInfoKHR',+-- 'RayTracingShaderGroupCreateInfoKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'createRayTracingPipelinesKHR'+data RayTracingPipelineCreateInfoKHR (es :: [Type]) = RayTracingPipelineCreateInfoKHR+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @flags@ is a bitmask of+    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'+    -- specifying how the pipeline will be generated.+    flags :: PipelineCreateFlags+  , -- | @pStages@ is a pointer to an array of @stageCount@+    -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures+    -- describing the set of the shader stages to be included in the ray+    -- tracing pipeline.+    stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)+  , -- | @pGroups@ is a pointer to an array of @groupCount@+    -- 'RayTracingShaderGroupCreateInfoKHR' structures describing the set of+    -- the shader stages to be included in each shader group in the ray tracing+    -- pipeline.+    groups :: Vector RayTracingShaderGroupCreateInfoKHR+  , -- | @maxRecursionDepth@ is the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth maximum recursion depth>+    -- of shaders executed by this pipeline.+    maxRecursionDepth :: Word32+  , -- | @libraries@ is a+    -- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'+    -- structure defining pipeline libraries to include.+    libraries :: PipelineLibraryCreateInfoKHR+  , -- | @pLibraryInterface@ is a pointer to a+    -- 'RayTracingPipelineInterfaceCreateInfoKHR' structure defining additional+    -- information when using pipeline libraries.+    libraryInterface :: Maybe RayTracingPipelineInterfaceCreateInfoKHR+  , -- | @layout@ is the description of binding locations used by both the+    -- pipeline and descriptor sets used with the pipeline.+    layout :: PipelineLayout+  , -- | @basePipelineHandle@ is a pipeline to derive from.+    basePipelineHandle :: Pipeline+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use+    -- as a pipeline to derive from.+    basePipelineIndex :: Int32+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (RayTracingPipelineCreateInfoKHR (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (RayTracingPipelineCreateInfoKHR es)++instance Extensible RayTracingPipelineCreateInfoKHR where+  extensibleType = STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR+  setNext x next = x{next = next}+  getNext RayTracingPipelineCreateInfoKHR{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends RayTracingPipelineCreateInfoKHR e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f+    | Just Refl <- eqT @e @PipelineCreationFeedbackCreateInfoEXT = Just f+    | otherwise = Nothing++instance (Extendss RayTracingPipelineCreateInfoKHR es, PokeChain es) => ToCStruct (RayTracingPipelineCreateInfoKHR es) where+  withCStruct x f = allocaBytesAligned 120 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p RayTracingPipelineCreateInfoKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags)+    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (stages)) :: Word32))+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (stages)) * 48) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (stages)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (groups)) :: Word32))+    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (groups)) * 48) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (e) . ($ ())) (groups)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups')+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (maxRecursionDepth)+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR)) (libraries) . ($ ())+    pLibraryInterface'' <- case (libraryInterface) of+      Nothing -> pure nullPtr+      Just j -> ContT $ withCStruct (j)+    lift $ poke ((p `plusPtr` 88 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR))) pLibraryInterface''+    lift $ poke ((p `plusPtr` 96 :: Ptr PipelineLayout)) (layout)+    lift $ poke ((p `plusPtr` 104 :: Ptr Pipeline)) (basePipelineHandle)+    lift $ poke ((p `plusPtr` 112 :: Ptr Int32)) (basePipelineIndex)+    lift $ f+  cStructSize = 120+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    pPStages' <- ContT $ allocaBytesAligned @(PipelineShaderStageCreateInfo _) ((Data.Vector.length (mempty)) * 48) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeSomeCStruct (forgetExtensions (pPStages' `plusPtr` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _))) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (pPStages')+    pPGroups' <- ContT $ allocaBytesAligned @RayTracingShaderGroupCreateInfoKHR ((Data.Vector.length (mempty)) * 48) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGroups' `plusPtr` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR))) (pPGroups')+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR)) (zero) . ($ ())+    lift $ poke ((p `plusPtr` 96 :: Ptr PipelineLayout)) (zero)+    lift $ poke ((p `plusPtr` 112 :: Ptr Int32)) (zero)+    lift $ f++instance (Extendss RayTracingPipelineCreateInfoKHR es, PeekChain es) => FromCStruct (RayTracingPipelineCreateInfoKHR es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags))+    stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo a))))+    pStages' <- generateM (fromIntegral stageCount) (\i -> peekSomeCStruct (forgetExtensions ((pStages `advancePtrBytes` (48 * (i)) :: Ptr (PipelineShaderStageCreateInfo _)))))+    groupCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))+    pGroups <- peek @(Ptr RayTracingShaderGroupCreateInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr RayTracingShaderGroupCreateInfoKHR)))+    pGroups' <- generateM (fromIntegral groupCount) (\i -> peekCStruct @RayTracingShaderGroupCreateInfoKHR ((pGroups `advancePtrBytes` (48 * (i)) :: Ptr RayTracingShaderGroupCreateInfoKHR)))+    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))+    libraries <- peekCStruct @PipelineLibraryCreateInfoKHR ((p `plusPtr` 56 :: Ptr PipelineLibraryCreateInfoKHR))+    pLibraryInterface <- peek @(Ptr RayTracingPipelineInterfaceCreateInfoKHR) ((p `plusPtr` 88 :: Ptr (Ptr RayTracingPipelineInterfaceCreateInfoKHR)))+    pLibraryInterface' <- maybePeek (\j -> peekCStruct @RayTracingPipelineInterfaceCreateInfoKHR (j)) pLibraryInterface+    layout <- peek @PipelineLayout ((p `plusPtr` 96 :: Ptr PipelineLayout))+    basePipelineHandle <- peek @Pipeline ((p `plusPtr` 104 :: Ptr Pipeline))+    basePipelineIndex <- peek @Int32 ((p `plusPtr` 112 :: Ptr Int32))+    pure $ RayTracingPipelineCreateInfoKHR+             next flags pStages' pGroups' maxRecursionDepth libraries pLibraryInterface' layout basePipelineHandle basePipelineIndex++instance es ~ '[] => Zero (RayTracingPipelineCreateInfoKHR es) where+  zero = RayTracingPipelineCreateInfoKHR+           ()+           zero+           mempty+           mempty+           zero+           zero+           Nothing+           zero+           zero+           zero+++-- | VkBindAccelerationStructureMemoryInfoKHR - Structure specifying+-- acceleration structure memory binding+--+-- == Valid Usage+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-accelerationStructure-02450#+--     @accelerationStructure@ /must/ not already be backed by a memory+--     object+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-memoryOffset-02451#+--     @memoryOffset@ /must/ be less than the size of @memory@+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-memory-02593#+--     @memory@ /must/ have been allocated using one of the memory types+--     allowed in the @memoryTypeBits@ member of the+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure+--     returned from a call to+--     'getAccelerationStructureMemoryRequirementsKHR' with+--     @accelerationStructure@ and @type@ of+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR'+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-memoryOffset-02594#+--     @memoryOffset@ /must/ be an integer multiple of the @alignment@+--     member of the 'Vulkan.Core10.MemoryManagement.MemoryRequirements'+--     structure returned from a call to+--     'getAccelerationStructureMemoryRequirementsKHR' with+--     @accelerationStructure@ and @type@ of+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR'+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-size-02595# The+--     @size@ member of the+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure+--     returned from a call to+--     'getAccelerationStructureMemoryRequirementsKHR' with+--     @accelerationStructure@ and @type@ of+--     'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR' /must/+--     be less than or equal to the size of @memory@ minus @memoryOffset@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR'+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-pNext-pNext# @pNext@+--     /must/ be @NULL@+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-accelerationStructure-parameter#+--     @accelerationStructure@ /must/ be a valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-memory-parameter#+--     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'+--     handle+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-pDeviceIndices-parameter#+--     If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid+--     pointer to an array of @deviceIndexCount@ @uint32_t@ values+--+-- -   #VUID-VkBindAccelerationStructureMemoryInfoKHR-commonparent# Both of+--     @accelerationStructure@, and @memory@ /must/ have been created,+--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'Vulkan.Core10.Handles.DeviceMemory',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'bindAccelerationStructureMemoryKHR',+-- 'Vulkan.Extensions.VK_NV_ray_tracing.bindAccelerationStructureMemoryNV'+data BindAccelerationStructureMemoryInfoKHR = BindAccelerationStructureMemoryInfoKHR+  { -- | @accelerationStructure@ is the acceleration structure to be attached to+    -- memory.+    accelerationStructure :: AccelerationStructureKHR+  , -- | @memory@ is a 'Vulkan.Core10.Handles.DeviceMemory' object describing the+    -- device memory to attach.+    memory :: DeviceMemory+  , -- | @memoryOffset@ is the start offset of the region of memory that is to be+    -- bound to the acceleration structure. The number of bytes returned in the+    -- 'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ member in+    -- @memory@, starting from @memoryOffset@ bytes, will be bound to the+    -- specified acceleration structure.+    memoryOffset :: DeviceSize+  , -- | @pDeviceIndices@ is a pointer to an array of device indices.+    deviceIndices :: Vector Word32+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (BindAccelerationStructureMemoryInfoKHR)+#endif+deriving instance Show BindAccelerationStructureMemoryInfoKHR++instance ToCStruct BindAccelerationStructureMemoryInfoKHR where+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p BindAccelerationStructureMemoryInfoKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (accelerationStructure)+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (memory)+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (memoryOffset)+    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (deviceIndices)) :: Word32))+    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (deviceIndices)) * 4) 4+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (deviceIndices)+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPDeviceIndices')+    lift $ f+  cStructSize = 56+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceMemory)) (zero)+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)+    pPDeviceIndices' <- ContT $ allocaBytesAligned @Word32 ((Data.Vector.length (mempty)) * 4) 4+    lift $ Data.Vector.imapM_ (\i e -> poke (pPDeviceIndices' `plusPtr` (4 * (i)) :: Ptr Word32) (e)) (mempty)+    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr Word32))) (pPDeviceIndices')+    lift $ f++instance FromCStruct BindAccelerationStructureMemoryInfoKHR where+  peekCStruct p = do+    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))+    memory <- peek @DeviceMemory ((p `plusPtr` 24 :: Ptr DeviceMemory))+    memoryOffset <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize))+    deviceIndexCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))+    pDeviceIndices <- peek @(Ptr Word32) ((p `plusPtr` 48 :: Ptr (Ptr Word32)))+    pDeviceIndices' <- generateM (fromIntegral deviceIndexCount) (\i -> peek @Word32 ((pDeviceIndices `advancePtrBytes` (4 * (i)) :: Ptr Word32)))+    pure $ BindAccelerationStructureMemoryInfoKHR+             accelerationStructure memory memoryOffset pDeviceIndices'++instance Zero BindAccelerationStructureMemoryInfoKHR where+  zero = BindAccelerationStructureMemoryInfoKHR+           zero+           zero+           zero+           mempty+++-- | VkWriteDescriptorSetAccelerationStructureKHR - Structure specifying+-- acceleration structure descriptor info+--+-- == Valid Usage+--+-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-02236#+--     @accelerationStructureCount@ /must/ be equal to @descriptorCount@ in+--     the extended structure+--+-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-02764#+--     Each acceleration structure in @pAccelerationStructures@ /must/ have+--     been created with 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-sType-sType#+--     @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR'+--+-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-pAccelerationStructures-parameter#+--     @pAccelerationStructures@ /must/ be a valid pointer to an array of+--     @accelerationStructureCount@ valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handles+--+-- -   #VUID-VkWriteDescriptorSetAccelerationStructureKHR-accelerationStructureCount-arraylength#+--     @accelerationStructureCount@ /must/ be greater than @0@+--+-- = See Also+--+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data WriteDescriptorSetAccelerationStructureKHR = WriteDescriptorSetAccelerationStructureKHR+  { -- | @pAccelerationStructures@ are the acceleration structures to update.+    accelerationStructures :: Vector AccelerationStructureKHR }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (WriteDescriptorSetAccelerationStructureKHR)+#endif+deriving instance Show WriteDescriptorSetAccelerationStructureKHR++instance ToCStruct WriteDescriptorSetAccelerationStructureKHR where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p WriteDescriptorSetAccelerationStructureKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (accelerationStructures)) :: Word32))+    pPAccelerationStructures' <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (accelerationStructures)) * 8) 8+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures' `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (accelerationStructures)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR))) (pPAccelerationStructures')+    lift $ f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    pPAccelerationStructures' <- ContT $ allocaBytesAligned @AccelerationStructureKHR ((Data.Vector.length (mempty)) * 8) 8+    lift $ Data.Vector.imapM_ (\i e -> poke (pPAccelerationStructures' `plusPtr` (8 * (i)) :: Ptr AccelerationStructureKHR) (e)) (mempty)+    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR))) (pPAccelerationStructures')+    lift $ f++instance FromCStruct WriteDescriptorSetAccelerationStructureKHR where+  peekCStruct p = do+    accelerationStructureCount <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))+    pAccelerationStructures <- peek @(Ptr AccelerationStructureKHR) ((p `plusPtr` 24 :: Ptr (Ptr AccelerationStructureKHR)))+    pAccelerationStructures' <- generateM (fromIntegral accelerationStructureCount) (\i -> peek @AccelerationStructureKHR ((pAccelerationStructures `advancePtrBytes` (8 * (i)) :: Ptr AccelerationStructureKHR)))+    pure $ WriteDescriptorSetAccelerationStructureKHR+             pAccelerationStructures'++instance Zero WriteDescriptorSetAccelerationStructureKHR where+  zero = WriteDescriptorSetAccelerationStructureKHR+           mempty+++-- | VkAccelerationStructureMemoryRequirementsInfoKHR - Structure specifying+-- acceleration to query for memory requirements+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'AccelerationStructureBuildTypeKHR',+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'AccelerationStructureMemoryRequirementsTypeKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'getAccelerationStructureMemoryRequirementsKHR'+data AccelerationStructureMemoryRequirementsInfoKHR = AccelerationStructureMemoryRequirementsInfoKHR+  { -- | @type@ selects the type of memory requirement being queried.+    -- 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR' returns the+    -- memory requirements for the object itself.+    -- 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR'+    -- returns the memory requirements for the scratch memory when doing a+    -- build.+    -- 'ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR'+    -- returns the memory requirements for the scratch memory when doing an+    -- update.+    --+    -- #VUID-VkAccelerationStructureMemoryRequirementsInfoKHR-type-parameter#+    -- @type@ /must/ be a valid+    -- 'AccelerationStructureMemoryRequirementsTypeKHR' value+    type' :: AccelerationStructureMemoryRequirementsTypeKHR+  , -- | @buildType@ selects the build types whose memory requirements are being+    -- queried.+    --+    -- #VUID-VkAccelerationStructureMemoryRequirementsInfoKHR-buildType-parameter#+    -- @buildType@ /must/ be a valid 'AccelerationStructureBuildTypeKHR' value+    buildType :: AccelerationStructureBuildTypeKHR+  , -- | @accelerationStructure@ is the acceleration structure to be queried for+    -- memory requirements.+    --+    -- #VUID-VkAccelerationStructureMemoryRequirementsInfoKHR-accelerationStructure-parameter#+    -- @accelerationStructure@ /must/ be a valid+    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+    accelerationStructure :: AccelerationStructureKHR+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureMemoryRequirementsInfoKHR)+#endif+deriving instance Show AccelerationStructureMemoryRequirementsInfoKHR++instance ToCStruct AccelerationStructureMemoryRequirementsInfoKHR where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureMemoryRequirementsInfoKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR)) (type')+    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR)) (buildType)+    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (accelerationStructure)+    f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR)) (zero)+    poke ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR)) (zero)+    poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)+    f++instance FromCStruct AccelerationStructureMemoryRequirementsInfoKHR where+  peekCStruct p = do+    type' <- peek @AccelerationStructureMemoryRequirementsTypeKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureMemoryRequirementsTypeKHR))+    buildType <- peek @AccelerationStructureBuildTypeKHR ((p `plusPtr` 20 :: Ptr AccelerationStructureBuildTypeKHR))+    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR))+    pure $ AccelerationStructureMemoryRequirementsInfoKHR+             type' buildType accelerationStructure++instance Storable AccelerationStructureMemoryRequirementsInfoKHR where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero AccelerationStructureMemoryRequirementsInfoKHR where+  zero = AccelerationStructureMemoryRequirementsInfoKHR+           zero+           zero+           zero+++-- | VkPhysicalDeviceRayTracingFeaturesKHR - Structure describing the ray+-- tracing features that can be supported by an implementation+--+-- = Members+--+-- The members of the 'PhysicalDeviceRayTracingFeaturesKHR' structure+-- describe the following features:+--+-- = Description+--+-- -   #features-raytracing# @rayTracing@ indicates whether the+--     implementation supports ray tracing functionality. See+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing Ray Tracing>.+--+-- -   #features-raytracing-sghcapturereplay#+--     @rayTracingShaderGroupHandleCaptureReplay@ indicates whether the+--     implementation supports saving and reusing shader group handles,+--     e.g. for trace capture and replay.+--+-- -   #features-raytracing-sghcapturereplaymixed#+--     @rayTracingShaderGroupHandleCaptureReplayMixed@ indicates whether+--     the implementation supports reuse of shader group handles being+--     arbitrarily mixed with creation of non-reused shader group handles.+--     If this is 'Vulkan.Core10.FundamentalTypes.FALSE', all reused shader+--     group handles /must/ be specified before any non-reused handles+--     /may/ be created.+--+-- -   #features-raytracing-ascapturereplay#+--     @rayTracingAccelerationStructureCaptureReplay@ indicates whether the+--     implementation supports saving and reusing acceleration structure+--     device addresses, e.g. for trace capture and replay.+--+-- -   #features-raytracing-indirecttraceray# @rayTracingIndirectTraceRays@+--     indicates whether the implementation supports indirect trace ray+--     commands, e.g. 'cmdTraceRaysIndirectKHR'.+--+-- -   #features-raytracing-indirectasbuild#+--     @rayTracingIndirectAccelerationStructureBuild@ indicates whether the+--     implementation supports indirect acceleration structure build+--     commands, e.g. 'cmdBuildAccelerationStructureIndirectKHR'.+--+-- -   #features-raytracing-hostascmds#+--     @rayTracingHostAccelerationStructureCommands@ indicates whether the+--     implementation supports host side acceleration structure commands,+--     e.g. 'buildAccelerationStructureKHR',+--     'copyAccelerationStructureKHR',+--     'copyAccelerationStructureToMemoryKHR',+--     'copyMemoryToAccelerationStructureKHR',+--     'writeAccelerationStructuresPropertiesKHR'.+--+-- -   #features-rayQuery# @rayQuery@ indicates whether the implementation+--     supports ray query (@OpRayQueryProceedKHR@) functionality.+--+-- -   #features-rayTracingPrimitiveCulling# @rayTracingPrimitiveCulling@+--     indicates whether the implementation supports+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-traversal-culling-primitive primitive culling during ray traversal>.+--+-- If the 'PhysicalDeviceRayTracingFeaturesKHR' structure is included in+-- the @pNext@ chain of+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',+-- it is filled with values indicating whether the feature is supported.+-- 'PhysicalDeviceRayTracingFeaturesKHR' /can/ also be used in the @pNext@+-- chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable the features.+--+-- == Valid Usage+--+-- -   #VUID-VkPhysicalDeviceRayTracingFeaturesKHR-rayTracingShaderGroupHandleCaptureReplayMixed-03348#+--     If @rayTracingShaderGroupHandleCaptureReplayMixed@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE',+--     @rayTracingShaderGroupHandleCaptureReplay@ /must/ also be+--     'Vulkan.Core10.FundamentalTypes.TRUE'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPhysicalDeviceRayTracingFeaturesKHR-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR'+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PhysicalDeviceRayTracingFeaturesKHR = PhysicalDeviceRayTracingFeaturesKHR+  { -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracing"+    rayTracing :: Bool+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingShaderGroupHandleCaptureReplay"+    rayTracingShaderGroupHandleCaptureReplay :: Bool+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingShaderGroupHandleCaptureReplayMixed"+    rayTracingShaderGroupHandleCaptureReplayMixed :: Bool+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingAccelerationStructureCaptureReplay"+    rayTracingAccelerationStructureCaptureReplay :: Bool+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingIndirectTraceRays"+    rayTracingIndirectTraceRays :: Bool+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingIndirectAccelerationStructureBuild"+    rayTracingIndirectAccelerationStructureBuild :: Bool+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingHostAccelerationStructureCommands"+    rayTracingHostAccelerationStructureCommands :: Bool+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayQuery"+    rayQuery :: Bool+  , -- No documentation found for Nested "VkPhysicalDeviceRayTracingFeaturesKHR" "rayTracingPrimitiveCulling"+    rayTracingPrimitiveCulling :: Bool+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceRayTracingFeaturesKHR)+#endif+deriving instance Show PhysicalDeviceRayTracingFeaturesKHR++instance ToCStruct PhysicalDeviceRayTracingFeaturesKHR where+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PhysicalDeviceRayTracingFeaturesKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (rayTracing))+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (rayTracingShaderGroupHandleCaptureReplay))+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (rayTracingShaderGroupHandleCaptureReplayMixed))+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (rayTracingAccelerationStructureCaptureReplay))+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (rayTracingIndirectTraceRays))+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (rayTracingIndirectAccelerationStructureBuild))+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (rayTracingHostAccelerationStructureCommands))+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (rayQuery))+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (rayTracingPrimitiveCulling))+    f+  cStructSize = 56+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 32 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 40 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 44 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 48 :: Ptr Bool32)) (boolToBool32 (zero))+    f++instance FromCStruct PhysicalDeviceRayTracingFeaturesKHR where+  peekCStruct p = do+    rayTracing <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))+    rayTracingShaderGroupHandleCaptureReplay <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))+    rayTracingShaderGroupHandleCaptureReplayMixed <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))+    rayTracingAccelerationStructureCaptureReplay <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))+    rayTracingIndirectTraceRays <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))+    rayTracingIndirectAccelerationStructureBuild <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))+    rayTracingHostAccelerationStructureCommands <- peek @Bool32 ((p `plusPtr` 40 :: Ptr Bool32))+    rayQuery <- peek @Bool32 ((p `plusPtr` 44 :: Ptr Bool32))+    rayTracingPrimitiveCulling <- peek @Bool32 ((p `plusPtr` 48 :: Ptr Bool32))+    pure $ PhysicalDeviceRayTracingFeaturesKHR+             (bool32ToBool rayTracing) (bool32ToBool rayTracingShaderGroupHandleCaptureReplay) (bool32ToBool rayTracingShaderGroupHandleCaptureReplayMixed) (bool32ToBool rayTracingAccelerationStructureCaptureReplay) (bool32ToBool rayTracingIndirectTraceRays) (bool32ToBool rayTracingIndirectAccelerationStructureBuild) (bool32ToBool rayTracingHostAccelerationStructureCommands) (bool32ToBool rayQuery) (bool32ToBool rayTracingPrimitiveCulling)++instance Storable PhysicalDeviceRayTracingFeaturesKHR where+  sizeOf ~_ = 56+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PhysicalDeviceRayTracingFeaturesKHR where+  zero = PhysicalDeviceRayTracingFeaturesKHR+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkPhysicalDeviceRayTracingPropertiesKHR - Properties of the physical+-- device for ray tracing+--+-- = Description+--+-- If the 'PhysicalDeviceRayTracingPropertiesKHR' structure is included in+-- the @pNext@ chain of+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',+-- it is filled with the implementation-dependent limits.+--+-- Limits specified by this structure /must/ match those specified with the+-- same name in+-- 'Vulkan.Extensions.VK_NV_ray_tracing.PhysicalDeviceRayTracingPropertiesNV'.+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PhysicalDeviceRayTracingPropertiesKHR = PhysicalDeviceRayTracingPropertiesKHR+  { -- | @shaderGroupHandleSize@ size in bytes of the shader header.+    shaderGroupHandleSize :: Word32+  , -- | #limits-maxRecursionDepth# @maxRecursionDepth@ is the maximum number of+    -- levels of recursion allowed in a trace command.+    maxRecursionDepth :: Word32+  , -- | @maxShaderGroupStride@ is the maximum stride in bytes allowed between+    -- shader groups in the SBT.+    maxShaderGroupStride :: Word32+  , -- | @shaderGroupBaseAlignment@ is the required alignment in bytes for the+    -- base of the SBTs.+    shaderGroupBaseAlignment :: Word32+  , -- | @maxGeometryCount@ is the maximum number of geometries in the bottom+    -- level acceleration structure.+    maxGeometryCount :: Word64+  , -- | @maxInstanceCount@ is the maximum number of instances in the top level+    -- acceleration structure.+    maxInstanceCount :: Word64+  , -- | @maxPrimitiveCount@ is the maximum number of triangles or AABBs in all+    -- geometries in the bottom level acceleration structure.+    maxPrimitiveCount :: Word64+  , -- | @maxDescriptorSetAccelerationStructures@ is the maximum number of+    -- acceleration structure descriptors that are allowed in a descriptor set.+    maxDescriptorSetAccelerationStructures :: Word32+  , -- | @shaderGroupHandleCaptureReplaySize@ is the number of bytes for the+    -- information required to do capture and replay for shader group handles.+    shaderGroupHandleCaptureReplaySize :: Word32+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceRayTracingPropertiesKHR)+#endif+deriving instance Show PhysicalDeviceRayTracingPropertiesKHR++instance ToCStruct PhysicalDeviceRayTracingPropertiesKHR where+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PhysicalDeviceRayTracingPropertiesKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr Word32)) (shaderGroupHandleSize)+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxRecursionDepth)+    poke ((p `plusPtr` 24 :: Ptr Word32)) (maxShaderGroupStride)+    poke ((p `plusPtr` 28 :: Ptr Word32)) (shaderGroupBaseAlignment)+    poke ((p `plusPtr` 32 :: Ptr Word64)) (maxGeometryCount)+    poke ((p `plusPtr` 40 :: Ptr Word64)) (maxInstanceCount)+    poke ((p `plusPtr` 48 :: Ptr Word64)) (maxPrimitiveCount)+    poke ((p `plusPtr` 56 :: Ptr Word32)) (maxDescriptorSetAccelerationStructures)+    poke ((p `plusPtr` 60 :: Ptr Word32)) (shaderGroupHandleCaptureReplaySize)+    f+  cStructSize = 64+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 24 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 28 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 32 :: Ptr Word64)) (zero)+    poke ((p `plusPtr` 40 :: Ptr Word64)) (zero)+    poke ((p `plusPtr` 48 :: Ptr Word64)) (zero)+    poke ((p `plusPtr` 56 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 60 :: Ptr Word32)) (zero)+    f++instance FromCStruct PhysicalDeviceRayTracingPropertiesKHR where+  peekCStruct p = do+    shaderGroupHandleSize <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))+    maxRecursionDepth <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    maxShaderGroupStride <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))+    shaderGroupBaseAlignment <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))+    maxGeometryCount <- peek @Word64 ((p `plusPtr` 32 :: Ptr Word64))+    maxInstanceCount <- peek @Word64 ((p `plusPtr` 40 :: Ptr Word64))+    maxPrimitiveCount <- peek @Word64 ((p `plusPtr` 48 :: Ptr Word64))+    maxDescriptorSetAccelerationStructures <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))+    shaderGroupHandleCaptureReplaySize <- peek @Word32 ((p `plusPtr` 60 :: Ptr Word32))+    pure $ PhysicalDeviceRayTracingPropertiesKHR+             shaderGroupHandleSize maxRecursionDepth maxShaderGroupStride shaderGroupBaseAlignment maxGeometryCount maxInstanceCount maxPrimitiveCount maxDescriptorSetAccelerationStructures shaderGroupHandleCaptureReplaySize++instance Storable PhysicalDeviceRayTracingPropertiesKHR where+  sizeOf ~_ = 64+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PhysicalDeviceRayTracingPropertiesKHR where+  zero = PhysicalDeviceRayTracingPropertiesKHR+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkStridedBufferRegionKHR - Structure specifying a region of a VkBuffer+-- with a stride+--+-- == Valid Usage+--+-- -   #VUID-VkStridedBufferRegionKHR-buffer-03515# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @size@ plus @offset@+--     /must/ be less than or equal to the size of @buffer@+--+-- -   #VUID-VkStridedBufferRegionKHR-buffer-03516# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @stride@ /must/ be less+--     than the size of @buffer@+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkStridedBufferRegionKHR-buffer-parameter# If @buffer@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.Buffer' handle+--+-- = See Also+--+-- 'Vulkan.Core10.Handles.Buffer',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'cmdTraceRaysIndirectKHR',+-- 'cmdTraceRaysKHR'+data StridedBufferRegionKHR = StridedBufferRegionKHR+  { -- | @buffer@ is the buffer containing this region.+    buffer :: Buffer+  , -- | @offset@ is the byte offset in @buffer@ at which the region starts.+    offset :: DeviceSize+  , -- | @stride@ is the byte stride between consecutive elements.+    stride :: DeviceSize+  , -- | @size@ is the size in bytes of the region starting at @offset@.+    size :: DeviceSize+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (StridedBufferRegionKHR)+#endif+deriving instance Show StridedBufferRegionKHR++instance ToCStruct StridedBufferRegionKHR where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p StridedBufferRegionKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Buffer)) (buffer)+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (offset)+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (stride)+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (size)+    f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 8 :: Ptr DeviceSize)) (zero)+    poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)+    poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)+    f++instance FromCStruct StridedBufferRegionKHR where+  peekCStruct p = do+    buffer <- peek @Buffer ((p `plusPtr` 0 :: Ptr Buffer))+    offset <- peek @DeviceSize ((p `plusPtr` 8 :: Ptr DeviceSize))+    stride <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))+    size <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize))+    pure $ StridedBufferRegionKHR+             buffer offset stride size++instance Storable StridedBufferRegionKHR where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero StridedBufferRegionKHR where+  zero = StridedBufferRegionKHR+           zero+           zero+           zero+           zero+++-- | VkTraceRaysIndirectCommandKHR - Structure specifying the parameters of+-- an indirect trace ray command+--+-- = Description+--+-- The members of 'TraceRaysIndirectCommandKHR' have the same meaning as+-- the similarly named parameters of 'cmdTraceRaysKHR'.+--+-- == Valid Usage+--+-- = See Also+--+-- No cross-references are available+data TraceRaysIndirectCommandKHR = TraceRaysIndirectCommandKHR+  { -- | @width@ is the width of the ray trace query dimensions.+    --+    -- #VUID-VkTraceRaysIndirectCommandKHR-width-03519# @width@ /must/ be less+    -- than or equal to+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0]+    width :: Word32+  , -- | @height@ is height of the ray trace query dimensions.+    --+    -- #VUID-VkTraceRaysIndirectCommandKHR-height-03520# @height@ /must/ be+    -- less than or equal to+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1]+    height :: Word32+  , -- | @depth@ is depth of the ray trace query dimensions.+    --+    -- #VUID-VkTraceRaysIndirectCommandKHR-depth-03521# @depth@ /must/ be less+    -- than or equal to+    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2]+    depth :: Word32+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (TraceRaysIndirectCommandKHR)+#endif+deriving instance Show TraceRaysIndirectCommandKHR++instance ToCStruct TraceRaysIndirectCommandKHR where+  withCStruct x f = allocaBytesAligned 12 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p TraceRaysIndirectCommandKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (width)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (height)+    poke ((p `plusPtr` 8 :: Ptr Word32)) (depth)+    f+  cStructSize = 12+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 8 :: Ptr Word32)) (zero)+    f++instance FromCStruct TraceRaysIndirectCommandKHR where+  peekCStruct p = do+    width <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))+    height <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    depth <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))+    pure $ TraceRaysIndirectCommandKHR+             width height depth++instance Storable TraceRaysIndirectCommandKHR where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero TraceRaysIndirectCommandKHR where+  zero = TraceRaysIndirectCommandKHR+           zero+           zero+           zero+++-- | VkAccelerationStructureGeometryTrianglesDataKHR - Structure specifying a+-- triangle geometry in a bottom-level acceleration structure+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-sType-sType#+--     @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR'+--+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-pNext-pNext#+--     @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexFormat-parameter#+--     @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'+--     value+--+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-vertexData-parameter#+--     @vertexData@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union+--+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexType-parameter#+--     @indexType@ /must/ be a valid+--     'Vulkan.Core10.Enums.IndexType.IndexType' value+--+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-indexData-parameter#+--     If @indexData@ is not @0@, @indexData@ /must/ be a valid+--     'DeviceOrHostAddressConstKHR' union+--+-- -   #VUID-VkAccelerationStructureGeometryTrianglesDataKHR-transformData-parameter#+--     If @transformData@ is not @0@, @transformData@ /must/ be a valid+--     'DeviceOrHostAddressConstKHR' union+--+-- = See Also+--+-- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Enums.Format.Format',+-- 'Vulkan.Core10.Enums.IndexType.IndexType',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeometryTrianglesDataKHR+  { -- | @vertexFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of each vertex+    -- element.+    vertexFormat :: Format+  , -- | @vertexData@ is a device or host address to memory containing vertex+    -- data for this geometry.+    vertexData :: DeviceOrHostAddressConstKHR+  , -- | @vertexStride@ is the stride in bytes between each vertex.+    vertexStride :: DeviceSize+  , -- | @indexType@ is the 'Vulkan.Core10.Enums.IndexType.IndexType' of each+    -- index element.+    indexType :: IndexType+  , -- | @indexData@ is a device or host address to memory containing index data+    -- for this geometry.+    indexData :: DeviceOrHostAddressConstKHR+  , -- | @transformData@ is a device or host address to memory containing an+    -- optional reference to a 'TransformMatrixKHR' structure defining a+    -- transformation that should be applied to vertices in this geometry.+    transformData :: DeviceOrHostAddressConstKHR+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureGeometryTrianglesDataKHR)+#endif+deriving instance Show AccelerationStructureGeometryTrianglesDataKHR++instance ToCStruct AccelerationStructureGeometryTrianglesDataKHR where+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureGeometryTrianglesDataKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (vertexFormat)+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (vertexData) . ($ ())+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (vertexStride)+    lift $ poke ((p `plusPtr` 40 :: Ptr IndexType)) (indexType)+    ContT $ pokeCStruct ((p `plusPtr` 48 :: Ptr DeviceOrHostAddressConstKHR)) (indexData) . ($ ())+    ContT $ pokeCStruct ((p `plusPtr` 56 :: Ptr DeviceOrHostAddressConstKHR)) (transformData) . ($ ())+    lift $ f+  cStructSize = 64+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Format)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())+    lift $ poke ((p `plusPtr` 32 :: Ptr DeviceSize)) (zero)+    lift $ poke ((p `plusPtr` 40 :: Ptr IndexType)) (zero)+    lift $ f++instance Zero AccelerationStructureGeometryTrianglesDataKHR where+  zero = AccelerationStructureGeometryTrianglesDataKHR+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkAccelerationStructureGeometryAabbsDataKHR - Structure specifying+-- axis-aligned bounding box geometry in a bottom-level acceleration+-- structure+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'AccelerationStructureGeometryDataKHR', 'DeviceOrHostAddressConstKHR',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data AccelerationStructureGeometryAabbsDataKHR = AccelerationStructureGeometryAabbsDataKHR+  { -- | @data@ is a device or host address to memory containing+    -- 'AabbPositionsKHR' structures containing position data for each+    -- axis-aligned bounding box in the geometry.+    --+    -- #VUID-VkAccelerationStructureGeometryAabbsDataKHR-data-03544# @data@+    -- /must/ be aligned to @8@ bytes+    --+    -- #VUID-VkAccelerationStructureGeometryAabbsDataKHR-data-parameter# @data@+    -- /must/ be a valid 'DeviceOrHostAddressConstKHR' union+    data' :: DeviceOrHostAddressConstKHR+  , -- | @stride@ is the stride in bytes between each entry in @data@.+    --+    -- #VUID-VkAccelerationStructureGeometryAabbsDataKHR-stride-03545# @stride@+    -- /must/ be a multiple of @8@+    stride :: DeviceSize+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureGeometryAabbsDataKHR)+#endif+deriving instance Show AccelerationStructureGeometryAabbsDataKHR++instance ToCStruct AccelerationStructureGeometryAabbsDataKHR where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureGeometryAabbsDataKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (data') . ($ ())+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (stride)+    lift $ f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    ContT $ pokeCStruct ((p `plusPtr` 16 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())+    lift $ poke ((p `plusPtr` 24 :: Ptr DeviceSize)) (zero)+    lift $ f++instance Zero AccelerationStructureGeometryAabbsDataKHR where+  zero = AccelerationStructureGeometryAabbsDataKHR+           zero+           zero+++-- | VkAccelerationStructureGeometryInstancesDataKHR - Structure specifying a+-- geometry consisting of instances of other acceleration structures+--+-- == Valid Usage+--+-- -   #VUID-VkAccelerationStructureGeometryInstancesDataKHR-data-03549#+--     @data@ /must/ be aligned to @16@ bytes+--+-- -   #VUID-VkAccelerationStructureGeometryInstancesDataKHR-arrayOfPointers-03550#+--     If @arrayOfPointers@ is true, each pointer /must/ be aligned to @16@+--     bytes+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkAccelerationStructureGeometryInstancesDataKHR-sType-sType#+--     @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR'+--+-- -   #VUID-VkAccelerationStructureGeometryInstancesDataKHR-pNext-pNext#+--     @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkAccelerationStructureGeometryInstancesDataKHR-data-parameter#+--     @data@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union+--+-- = See Also+--+-- 'AccelerationStructureGeometryDataKHR',+-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'DeviceOrHostAddressConstKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data AccelerationStructureGeometryInstancesDataKHR = AccelerationStructureGeometryInstancesDataKHR+  { -- | @arrayOfPointers@ specifies whether @data@ is used as an array of+    -- addresses or just an array.+    arrayOfPointers :: Bool+  , -- | @data@ is either the address of an array of device or host addresses+    -- referencing individual 'AccelerationStructureInstanceKHR' structures if+    -- @arrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or the+    -- address of an array of 'AccelerationStructureInstanceKHR' structures.+    data' :: DeviceOrHostAddressConstKHR+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureGeometryInstancesDataKHR)+#endif+deriving instance Show AccelerationStructureGeometryInstancesDataKHR++instance ToCStruct AccelerationStructureGeometryInstancesDataKHR where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureGeometryInstancesDataKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (arrayOfPointers))+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (data') . ($ ())+    lift $ f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressConstKHR)) (zero) . ($ ())+    lift $ f++instance Zero AccelerationStructureGeometryInstancesDataKHR where+  zero = AccelerationStructureGeometryInstancesDataKHR+           zero+           zero+++-- | VkAccelerationStructureGeometryKHR - Structure specifying geometries to+-- be built into an acceleration structure+--+-- == Valid Usage+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-geometryType-03541# If+--     @geometryType@ is 'GEOMETRY_TYPE_AABBS_KHR', the @aabbs@ member of+--     @geometry@ /must/ be a valid+--     'AccelerationStructureGeometryAabbsDataKHR' structure+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-geometryType-03542# If+--     @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', the @triangles@+--     member of @geometry@ /must/ be a valid+--     'AccelerationStructureGeometryTrianglesDataKHR' structure+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-geometryType-03543# If+--     @geometryType@ is 'GEOMETRY_TYPE_INSTANCES_KHR', the @instances@+--     member of @geometry@ /must/ be a valid+--     'AccelerationStructureGeometryInstancesDataKHR' structure+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-sType-sType# @sType@ /must/+--     be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR'+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-pNext-pNext# @pNext@ /must/+--     be @NULL@+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-geometryType-parameter#+--     @geometryType@ /must/ be a valid 'GeometryTypeKHR' value+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-triangles-parameter# If+--     @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', the @triangles@+--     member of @geometry@ /must/ be a valid+--     'AccelerationStructureGeometryTrianglesDataKHR' structure+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-aabbs-parameter# If+--     @geometryType@ is 'GEOMETRY_TYPE_AABBS_KHR', the @aabbs@ member of+--     @geometry@ /must/ be a valid+--     'AccelerationStructureGeometryAabbsDataKHR' structure+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-instances-parameter# If+--     @geometryType@ is 'GEOMETRY_TYPE_INSTANCES_KHR', the @instances@+--     member of @geometry@ /must/ be a valid+--     'AccelerationStructureGeometryInstancesDataKHR' structure+--+-- -   #VUID-VkAccelerationStructureGeometryKHR-flags-parameter# @flags@+--     /must/ be a valid combination of 'GeometryFlagBitsKHR' values+--+-- = See Also+--+-- 'AccelerationStructureBuildGeometryInfoKHR',+-- 'AccelerationStructureGeometryDataKHR', 'GeometryFlagsKHR',+-- 'GeometryTypeKHR', 'Vulkan.Core10.Enums.StructureType.StructureType'+data AccelerationStructureGeometryKHR = AccelerationStructureGeometryKHR+  { -- | @geometryType@ describes which type of geometry this+    -- 'AccelerationStructureGeometryKHR' refers to.+    geometryType :: GeometryTypeKHR+  , -- | @geometry@ is a 'AccelerationStructureGeometryDataKHR' union describing+    -- the geometry data for the relevant geometry type.+    geometry :: AccelerationStructureGeometryDataKHR+  , -- | @flags@ is a bitmask of 'GeometryFlagBitsKHR' values describing+    -- additional properties of how the geometry should be built.+    flags :: GeometryFlagsKHR+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureGeometryKHR)+#endif+deriving instance Show AccelerationStructureGeometryKHR++instance ToCStruct AccelerationStructureGeometryKHR where+  withCStruct x f = allocaBytesAligned 96 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureGeometryKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureGeometryDataKHR)) (geometry) . ($ ())+    lift $ poke ((p `plusPtr` 88 :: Ptr GeometryFlagsKHR)) (flags)+    lift $ f+  cStructSize = 96+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr AccelerationStructureGeometryDataKHR)) (zero) . ($ ())+    lift $ f++instance Zero AccelerationStructureGeometryKHR where+  zero = AccelerationStructureGeometryKHR+           zero+           zero+           zero+++-- | VkAccelerationStructureBuildGeometryInfoKHR - Structure specifying the+-- geometry data used to build an acceleration structure+--+-- = Description+--+-- Note+--+-- Elements of @ppGeometries@ are accessed as follows, based on+-- @geometryArrayOfPointers@:+--+-- > if (geometryArrayOfPointers) {+-- >     use *(ppGeometries[i]);+-- > } else {+-- >     use (*ppGeometries)[i];+-- > }+--+-- == Valid Usage+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-update-03537# If+--     @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     @srcAccelerationStructure@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE'+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-update-03538# If+--     @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+--     @srcAccelerationStructure@ /must/ have been built before with+--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR' set in+--     'AccelerationStructureBuildGeometryInfoKHR'::@flags@+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-scratchData-03539#+--     @scratchData@ /must/ have been created with+--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_RAY_TRACING_BIT_KHR'+--     usage flag+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-update-03540# If+--     @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', the+--     @srcAccelerationStructure@ and @dstAccelerationStructure@ objects+--     /must/ either be the same object or not have any+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing>+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-sType-sType#+--     @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR'+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-pNext-pNext#+--     @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-sType-unique# The+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-type-parameter#+--     @type@ /must/ be a valid 'AccelerationStructureTypeKHR' value+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-flags-parameter#+--     @flags@ /must/ be a valid combination of+--     'BuildAccelerationStructureFlagBitsKHR' values+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-srcAccelerationStructure-parameter#+--     If @srcAccelerationStructure@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @srcAccelerationStructure@+--     /must/ be a valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-dstAccelerationStructure-parameter#+--     @dstAccelerationStructure@ /must/ be a valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-scratchData-parameter#+--     @scratchData@ /must/ be a valid 'DeviceOrHostAddressKHR' union+--+-- -   #VUID-VkAccelerationStructureBuildGeometryInfoKHR-commonparent# Both+--     of @dstAccelerationStructure@, and @srcAccelerationStructure@ that+--     are valid handles of non-ignored parameters /must/ have been+--     created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'AccelerationStructureGeometryKHR',+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'AccelerationStructureTypeKHR', 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'BuildAccelerationStructureFlagsKHR', 'DeviceOrHostAddressKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'buildAccelerationStructureKHR',+-- 'cmdBuildAccelerationStructureIndirectKHR',+-- 'cmdBuildAccelerationStructureKHR'+data AccelerationStructureBuildGeometryInfoKHR (es :: [Type]) = AccelerationStructureBuildGeometryInfoKHR+  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.+    next :: Chain es+  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of+    -- acceleration structure being built.+    type' :: AccelerationStructureTypeKHR+  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'+    -- specifying additional parameters of the acceleration structure.+    flags :: BuildAccelerationStructureFlagsKHR+  , -- | @update@ specifies whether to update @dstAccelerationStructure@ with the+    -- data in @srcAccelerationStructure@ or not.+    update :: Bool+  , -- | @srcAccelerationStructure@ points to an existing acceleration structure+    -- that is to be used to update the @dst@ acceleration structure when+    -- @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE'.+    srcAccelerationStructure :: AccelerationStructureKHR+  , -- | @dstAccelerationStructure@ points to the target acceleration structure+    -- for the build.+    dstAccelerationStructure :: AccelerationStructureKHR+  , -- | @ppGeometries@ is either a pointer to an array of pointers to+    -- 'AccelerationStructureGeometryKHR' structures if+    -- @geometryArrayOfPointers@ is 'Vulkan.Core10.FundamentalTypes.TRUE', or a+    -- pointer to a pointer to an array of 'AccelerationStructureGeometryKHR'+    -- structures if it is 'Vulkan.Core10.FundamentalTypes.FALSE'. Each element+    -- of the array describes the data used to build each acceleration+    -- structure geometry.+    geometries :: Vector AccelerationStructureGeometryKHR+  , -- | @scratchData@ is the device or host address to memory that will be used+    -- as scratch memory for the build.+    scratchData :: DeviceOrHostAddressKHR+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureBuildGeometryInfoKHR (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (AccelerationStructureBuildGeometryInfoKHR es)++instance Extensible AccelerationStructureBuildGeometryInfoKHR where+  extensibleType = STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR+  setNext x next = x{next = next}+  getNext AccelerationStructureBuildGeometryInfoKHR{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends AccelerationStructureBuildGeometryInfoKHR e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f+    | otherwise = Nothing++instance (Extendss AccelerationStructureBuildGeometryInfoKHR es, PokeChain es) => ToCStruct (AccelerationStructureBuildGeometryInfoKHR es) where+  withCStruct x f = allocaBytesAligned 72 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureBuildGeometryInfoKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeKHR)) (type')+    lift $ poke ((p `plusPtr` 20 :: Ptr BuildAccelerationStructureFlagsKHR)) (flags)+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (update))+    lift $ poke ((p `plusPtr` 32 :: Ptr AccelerationStructureKHR)) (srcAccelerationStructure)+    lift $ poke ((p `plusPtr` 40 :: Ptr AccelerationStructureKHR)) (dstAccelerationStructure)+    lift $ poke ((p `plusPtr` 48 :: Ptr Bool32)) (FALSE)+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometries)) :: Word32))+    pPpGeometries' <- ContT $ allocaBytesAligned @AccelerationStructureGeometryKHR ((Data.Vector.length (geometries)) * 96) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPpGeometries' `plusPtr` (96 * (i)) :: Ptr AccelerationStructureGeometryKHR) (e) . ($ ())) (geometries)+    ppGeometries'' <- ContT $ with (pPpGeometries')+    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr AccelerationStructureGeometryKHR)))) ppGeometries''+    ContT $ pokeCStruct ((p `plusPtr` 64 :: Ptr DeviceOrHostAddressKHR)) (scratchData) . ($ ())+    lift $ f+  cStructSize = 72+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureTypeKHR)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))+    lift $ poke ((p `plusPtr` 40 :: Ptr AccelerationStructureKHR)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 64 :: Ptr DeviceOrHostAddressKHR)) (zero) . ($ ())+    lift $ f++instance es ~ '[] => Zero (AccelerationStructureBuildGeometryInfoKHR es) where+  zero = AccelerationStructureBuildGeometryInfoKHR+           ()+           zero+           zero+           zero+           zero+           zero+           mempty+           zero+++-- | VkAccelerationStructureBuildOffsetInfoKHR - Structure specifying build+-- offsets and counts for acceleration structure builds+--+-- = Description+--+-- The primitive count and primitive offset are interpreted differently+-- depending on the 'GeometryTypeKHR' used:+--+-- -   For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR',+--     @primitiveCount@ is the number of triangles to be built, where each+--     triangle is treated as 3 vertices.+--+--     -   If the geometry uses indices, @primitiveCount@ × 3 indices are+--         consumed from+--         'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@,+--         starting at an offset of @primitiveOffset@. The value of+--         @firstVertex@ is added to the index values before fetching+--         vertices.+--+--     -   If the geometry does not use indices, @primitiveCount@ × 3+--         vertices are consumed from+--         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@,+--         starting at an offset of @primitiveOffset@ ++--         'AccelerationStructureGeometryTrianglesDataKHR'::@vertexStride@+--         × @firstVertex@.+--+--     -   A single 'TransformMatrixKHR' structure is consumed from+--         'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@,+--         at an offset of @transformOffset@. This transformation matrix is+--         used by all triangles.+--+-- -   For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', @primitiveCount@+--     is the number of axis-aligned bounding boxes. @primitiveCount@+--     'AabbPositionsKHR' structures are consumed from+--     'AccelerationStructureGeometryAabbsDataKHR'::@data@, starting at an+--     offset of @primitiveOffset@.+--+-- -   For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR',+--     @primitiveCount@ is the number of acceleration structures.+--     @primitiveCount@ 'AccelerationStructureInstanceKHR' structures are+--     consumed from+--     'AccelerationStructureGeometryInstancesDataKHR'::@data@, starting at+--     an offset of @primitiveOffset@.+--+-- == Valid Usage+--+-- -   #VUID-VkAccelerationStructureBuildOffsetInfoKHR-primitiveOffset-03551#+--     For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the+--     geometry uses indices, the offset @primitiveOffset@ from+--     'AccelerationStructureGeometryTrianglesDataKHR'::@indexData@ /must/+--     be a multiple of the element size of+--     'AccelerationStructureGeometryTrianglesDataKHR'::@indexType@+--+-- -   #VUID-VkAccelerationStructureBuildOffsetInfoKHR-primitiveOffset-03552#+--     For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', if the+--     geometry doesn’t use indices, the offset @primitiveOffset@ from+--     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexData@ /must/+--     be a multiple of the component size of+--     'AccelerationStructureGeometryTrianglesDataKHR'::@vertexFormat@+--+-- -   #VUID-VkAccelerationStructureBuildOffsetInfoKHR-transformOffset-03553#+--     For geometries of type 'GEOMETRY_TYPE_TRIANGLES_KHR', the offset+--     @transformOffset@ from+--     'AccelerationStructureGeometryTrianglesDataKHR'::@transformData@+--     /must/ be a multiple of 16+--+-- -   #VUID-VkAccelerationStructureBuildOffsetInfoKHR-primitiveOffset-03554#+--     For geometries of type 'GEOMETRY_TYPE_AABBS_KHR', the offset+--     @primitiveOffset@ from+--     'AccelerationStructureGeometryAabbsDataKHR'::@data@ /must/ be a+--     multiple of 8+--+-- -   #VUID-VkAccelerationStructureBuildOffsetInfoKHR-primitiveOffset-03555#+--     For geometries of type 'GEOMETRY_TYPE_INSTANCES_KHR', the offset+--     @primitiveOffset@ from+--     'AccelerationStructureGeometryInstancesDataKHR'::@data@ /must/ be a+--     multiple of 16 \/\/ TODO - Almost certainly should be more here+--+-- = See Also+--+-- 'buildAccelerationStructureKHR', 'cmdBuildAccelerationStructureKHR'+data AccelerationStructureBuildOffsetInfoKHR = AccelerationStructureBuildOffsetInfoKHR+  { -- | @primitiveCount@ defines the number of primitives for a corresponding+    -- acceleration structure geometry.+    primitiveCount :: Word32+  , -- | @primitiveOffset@ defines an offset in bytes into the memory where+    -- primitive data is defined.+    primitiveOffset :: Word32+  , -- | @firstVertex@ is the index of the first vertex to build from for+    -- triangle geometry.+    firstVertex :: Word32+  , -- | @transformOffset@ defines an offset in bytes into the memory where a+    -- transform matrix is defined.+    transformOffset :: Word32+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureBuildOffsetInfoKHR)+#endif+deriving instance Show AccelerationStructureBuildOffsetInfoKHR++instance ToCStruct AccelerationStructureBuildOffsetInfoKHR where+  withCStruct x f = allocaBytesAligned 16 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureBuildOffsetInfoKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (primitiveCount)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (primitiveOffset)+    poke ((p `plusPtr` 8 :: Ptr Word32)) (firstVertex)+    poke ((p `plusPtr` 12 :: Ptr Word32)) (transformOffset)+    f+  cStructSize = 16+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 4 :: Ptr Word32)) (zero)+    f++instance FromCStruct AccelerationStructureBuildOffsetInfoKHR where+  peekCStruct p = do+    primitiveCount <- peek @Word32 ((p `plusPtr` 0 :: Ptr Word32))+    primitiveOffset <- peek @Word32 ((p `plusPtr` 4 :: Ptr Word32))+    firstVertex <- peek @Word32 ((p `plusPtr` 8 :: Ptr Word32))+    transformOffset <- peek @Word32 ((p `plusPtr` 12 :: Ptr Word32))+    pure $ AccelerationStructureBuildOffsetInfoKHR+             primitiveCount primitiveOffset firstVertex transformOffset++instance Storable AccelerationStructureBuildOffsetInfoKHR where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero AccelerationStructureBuildOffsetInfoKHR where+  zero = AccelerationStructureBuildOffsetInfoKHR+           zero+           zero+           zero+           zero+++-- | VkAccelerationStructureCreateGeometryTypeInfoKHR - Structure specifying+-- the shape of geometries that will be built into an acceleration+-- structure+--+-- = Description+--+-- When @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR':+--+-- -   if @indexType@ is+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then this+--     structure describes a set of triangles.+--+-- -   if @indexType@ is not+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR', then this+--     structure describes a set of indexed triangles.+--+-- == Valid Usage+--+-- -   #VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-geometryType-03501#+--     If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', @vertexFormat@+--     /must/ support the+--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR'+--     in+--     'Vulkan.Core10.DeviceInitialization.FormatProperties'::@bufferFeatures@+--     as returned by+--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'+--+-- -   #VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-geometryType-03502#+--     If @geometryType@ is 'GEOMETRY_TYPE_TRIANGLES_KHR', @indexType@+--     /must/ be 'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16',+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or+--     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_NONE_KHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-sType-sType#+--     @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR'+--+-- -   #VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-pNext-pNext#+--     @pNext@ /must/ be @NULL@+--+-- -   #VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-geometryType-parameter#+--     @geometryType@ /must/ be a valid 'GeometryTypeKHR' value+--+-- -   #VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-indexType-parameter#+--     @indexType@ /must/ be a valid+--     'Vulkan.Core10.Enums.IndexType.IndexType' value+--+-- -   #VUID-VkAccelerationStructureCreateGeometryTypeInfoKHR-vertexFormat-parameter#+--     If @vertexFormat@ is not @0@, @vertexFormat@ /must/ be a valid+--     'Vulkan.Core10.Enums.Format.Format' value+--+-- = See Also+--+-- 'AccelerationStructureCreateInfoKHR',+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Enums.Format.Format', 'GeometryTypeKHR',+-- 'Vulkan.Core10.Enums.IndexType.IndexType',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data AccelerationStructureCreateGeometryTypeInfoKHR = AccelerationStructureCreateGeometryTypeInfoKHR+  { -- | @geometryType@ is a 'GeometryTypeKHR' that describes the type of an+    -- acceleration structure geometry.+    geometryType :: GeometryTypeKHR+  , -- | @maxPrimitiveCount@ describes the maximum number of primitives that+    -- /can/ be built into an acceleration structure geometry.+    maxPrimitiveCount :: Word32+  , -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' that+    -- describes the index type used to build this geometry when @geometryType@+    -- is 'GEOMETRY_TYPE_TRIANGLES_KHR'.+    indexType :: IndexType+  , -- | @maxVertexCount@ describes the maximum vertex count that /can/ be used+    -- to build an acceleration structure geometry when @geometryType@ is+    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.+    maxVertexCount :: Word32+  , -- | @vertexFormat@ is a 'Vulkan.Core10.Enums.Format.Format' that describes+    -- the vertex format used to build this geometry when @geometryType@ is+    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.+    vertexFormat :: Format+  , -- | @allowsTransforms@ indicates whether transform data /can/ be used by+    -- this acceleration structure or not, when @geometryType@ is+    -- 'GEOMETRY_TYPE_TRIANGLES_KHR'.+    allowsTransforms :: Bool+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureCreateGeometryTypeInfoKHR)+#endif+deriving instance Show AccelerationStructureCreateGeometryTypeInfoKHR++instance ToCStruct AccelerationStructureCreateGeometryTypeInfoKHR where+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureCreateGeometryTypeInfoKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (geometryType)+    poke ((p `plusPtr` 20 :: Ptr Word32)) (maxPrimitiveCount)+    poke ((p `plusPtr` 24 :: Ptr IndexType)) (indexType)+    poke ((p `plusPtr` 28 :: Ptr Word32)) (maxVertexCount)+    poke ((p `plusPtr` 32 :: Ptr Format)) (vertexFormat)+    poke ((p `plusPtr` 36 :: Ptr Bool32)) (boolToBool32 (allowsTransforms))+    f+  cStructSize = 40+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr GeometryTypeKHR)) (zero)+    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)+    poke ((p `plusPtr` 24 :: Ptr IndexType)) (zero)+    f++instance FromCStruct AccelerationStructureCreateGeometryTypeInfoKHR where+  peekCStruct p = do+    geometryType <- peek @GeometryTypeKHR ((p `plusPtr` 16 :: Ptr GeometryTypeKHR))+    maxPrimitiveCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))+    indexType <- peek @IndexType ((p `plusPtr` 24 :: Ptr IndexType))+    maxVertexCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))+    vertexFormat <- peek @Format ((p `plusPtr` 32 :: Ptr Format))+    allowsTransforms <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))+    pure $ AccelerationStructureCreateGeometryTypeInfoKHR+             geometryType maxPrimitiveCount indexType maxVertexCount vertexFormat (bool32ToBool allowsTransforms)++instance Storable AccelerationStructureCreateGeometryTypeInfoKHR where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero AccelerationStructureCreateGeometryTypeInfoKHR where+  zero = AccelerationStructureCreateGeometryTypeInfoKHR+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkAccelerationStructureCreateInfoKHR - Structure specifying the+-- parameters of a newly created acceleration structure object+--+-- = Description+--+-- If @deviceAddress@ is zero, no specific address is requested.+--+-- If @deviceAddress@ is not zero, @deviceAddress@ /must/ be an address+-- retrieved from an identically created acceleration structure on the same+-- implementation. The acceleration structure /must/ also be bound to an+-- identically created 'Vulkan.Core10.Handles.DeviceMemory' object.+--+-- Apps /should/ avoid creating acceleration structures with app-provided+-- addresses and implementation-provided addresses in the same process, to+-- reduce the likelihood of+-- 'Vulkan.Extensions.VK_KHR_buffer_device_address.ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR'+-- errors.+--+-- == Valid Usage+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-compactedSize-03490# If+--     @compactedSize@ is not @0@ then @maxGeometryCount@ /must/ be @0@+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-compactedSize-02993# If+--     @compactedSize@ is @0@ then @maxGeometryCount@ /must/ not be @0@+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-type-03491# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then+--     @maxGeometryCount@ /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxGeometryCount@+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-type-03492# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' then the+--     @maxPrimitiveCount@ member of each element of the @pGeometryInfos@+--     array /must/ be less than or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxInstanceCount@+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-maxPrimitiveCount-03493#+--     The total number of triangles in all geometries /must/ be less than+--     or equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxPrimitiveCount@+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-maxPrimitiveCount-03494#+--     The total number of AABBs in all geometries /must/ be less than or+--     equal to+--     'PhysicalDeviceRayTracingPropertiesKHR'::@maxPrimitiveCount@+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-type-03495# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' and @compactedSize@ is+--     @0@, @maxGeometryCount@ /must/ be @1@+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-type-03496# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR' and @compactedSize@ is+--     @0@, the @geometryType@ member of elements of @pGeometryInfos@+--     /must/ be 'GEOMETRY_TYPE_INSTANCES_KHR'+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-type-03497# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' and @compactedSize@+--     is @0@, the @geometryType@ member of elements of @pGeometryInfos@+--     /must/ not be 'GEOMETRY_TYPE_INSTANCES_KHR'+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-type-03498# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR' then the+--     @geometryType@ member of each geometry in @pGeometryInfos@ /must/ be+--     the same+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-flags-03499# If @flags@+--     has the 'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR' bit+--     set, then it /must/ not have the+--     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR' bit set+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-deviceAddress-03500# If+--     @deviceAddress@ is not @0@,+--     'PhysicalDeviceRayTracingFeaturesKHR'::@rayTracingAccelerationStructureCaptureReplay@+--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-sType-sType# @sType@+--     /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR'+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-pNext-pNext# @pNext@+--     /must/ be @NULL@+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-type-parameter# @type@+--     /must/ be a valid 'AccelerationStructureTypeKHR' value+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-flags-parameter# @flags@+--     /must/ be a valid combination of+--     'BuildAccelerationStructureFlagBitsKHR' values+--+-- -   #VUID-VkAccelerationStructureCreateInfoKHR-pGeometryInfos-parameter#+--     If @maxGeometryCount@ is not @0@, @pGeometryInfos@ /must/ be a valid+--     pointer to an array of @maxGeometryCount@ valid+--     'AccelerationStructureCreateGeometryTypeInfoKHR' structures+--+-- = See Also+--+-- 'AccelerationStructureCreateGeometryTypeInfoKHR',+-- 'AccelerationStructureTypeKHR', 'BuildAccelerationStructureFlagsKHR',+-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',+-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'createAccelerationStructureKHR'+data AccelerationStructureCreateInfoKHR = AccelerationStructureCreateInfoKHR+  { -- | @compactedSize@ is the size from the result of+    -- 'cmdWriteAccelerationStructuresPropertiesKHR' if this acceleration+    -- structure is going to be the target of a compacting copy.+    compactedSize :: DeviceSize+  , -- | @type@ is a 'AccelerationStructureTypeKHR' value specifying the type of+    -- acceleration structure that will be created.+    type' :: AccelerationStructureTypeKHR+  , -- | @flags@ is a bitmask of 'BuildAccelerationStructureFlagBitsKHR'+    -- specifying additional parameters of the acceleration structure.+    flags :: BuildAccelerationStructureFlagsKHR+  , -- | @pGeometryInfos@ is an array of @maxGeometryCount@+    -- 'AccelerationStructureCreateGeometryTypeInfoKHR' structures, which+    -- describe the maximum size and format of the data that will be built into+    -- the acceleration structure.+    geometryInfos :: Vector AccelerationStructureCreateGeometryTypeInfoKHR+  , -- | @deviceAddress@ is the device address requested for the acceleration+    -- structure if the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-raytracing-ascapturereplay rayTracingAccelerationStructureCaptureReplay>+    -- feature is being used.+    deviceAddress :: DeviceAddress+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureCreateInfoKHR)+#endif+deriving instance Show AccelerationStructureCreateInfoKHR++instance ToCStruct AccelerationStructureCreateInfoKHR where+  withCStruct x f = allocaBytesAligned 56 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureCreateInfoKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (compactedSize)+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR)) (type')+    lift $ poke ((p `plusPtr` 28 :: Ptr BuildAccelerationStructureFlagsKHR)) (flags)+    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (geometryInfos)) :: Word32))+    pPGeometryInfos' <- ContT $ allocaBytesAligned @AccelerationStructureCreateGeometryTypeInfoKHR ((Data.Vector.length (geometryInfos)) * 40) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometryInfos' `plusPtr` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR) (e) . ($ ())) (geometryInfos)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR))) (pPGeometryInfos')+    lift $ poke ((p `plusPtr` 48 :: Ptr DeviceAddress)) (deviceAddress)+    lift $ f+  cStructSize = 56+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceSize)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR)) (zero)+    pPGeometryInfos' <- ContT $ allocaBytesAligned @AccelerationStructureCreateGeometryTypeInfoKHR ((Data.Vector.length (mempty)) * 40) 8+    Data.Vector.imapM_ (\i e -> ContT $ pokeCStruct (pPGeometryInfos' `plusPtr` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR) (e) . ($ ())) (mempty)+    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR))) (pPGeometryInfos')+    lift $ f++instance FromCStruct AccelerationStructureCreateInfoKHR where+  peekCStruct p = do+    compactedSize <- peek @DeviceSize ((p `plusPtr` 16 :: Ptr DeviceSize))+    type' <- peek @AccelerationStructureTypeKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureTypeKHR))+    flags <- peek @BuildAccelerationStructureFlagsKHR ((p `plusPtr` 28 :: Ptr BuildAccelerationStructureFlagsKHR))+    maxGeometryCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))+    pGeometryInfos <- peek @(Ptr AccelerationStructureCreateGeometryTypeInfoKHR) ((p `plusPtr` 40 :: Ptr (Ptr AccelerationStructureCreateGeometryTypeInfoKHR)))+    pGeometryInfos' <- generateM (fromIntegral maxGeometryCount) (\i -> peekCStruct @AccelerationStructureCreateGeometryTypeInfoKHR ((pGeometryInfos `advancePtrBytes` (40 * (i)) :: Ptr AccelerationStructureCreateGeometryTypeInfoKHR)))+    deviceAddress <- peek @DeviceAddress ((p `plusPtr` 48 :: Ptr DeviceAddress))+    pure $ AccelerationStructureCreateInfoKHR+             compactedSize type' flags pGeometryInfos' deviceAddress++instance Zero AccelerationStructureCreateInfoKHR where+  zero = AccelerationStructureCreateInfoKHR+           zero+           zero+           zero+           mempty+           zero+++-- | VkAabbPositionsKHR - Structure specifying two opposing corners of an+-- axis-aligned bounding box+--+-- == Valid Usage+--+-- = See Also+--+-- No cross-references are available+data AabbPositionsKHR = AabbPositionsKHR+  { -- | @minX@ is the x position of one opposing corner of a bounding box.+    --+    -- #VUID-VkAabbPositionsKHR-minX-03546# @minX@ /must/ be less than or equal+    -- to @maxX@+    minX :: Float+  , -- | @minY@ is the y position of one opposing corner of a bounding box.+    --+    -- #VUID-VkAabbPositionsKHR-minY-03547# @minY@ /must/ be less than or equal+    -- to @maxY@+    minY :: Float+  , -- | @minZ@ is the z position of one opposing corner of a bounding box.+    --+    -- #VUID-VkAabbPositionsKHR-minZ-03548# @minZ@ /must/ be less than or equal+    -- to @maxZ@+    minZ :: Float+  , -- | @maxX@ is the x position of the other opposing corner of a bounding box.+    maxX :: Float+  , -- | @maxY@ is the y position of the other opposing corner of a bounding box.+    maxY :: Float+  , -- | @maxZ@ is the z position of the other opposing corner of a bounding box.+    maxZ :: Float+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AabbPositionsKHR)+#endif+deriving instance Show AabbPositionsKHR++instance ToCStruct AabbPositionsKHR where+  withCStruct x f = allocaBytesAligned 24 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AabbPositionsKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (minX))+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (minY))+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (minZ))+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (maxX))+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (maxY))+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (maxZ))+    f+  cStructSize = 24+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 4 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 8 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 12 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 16 :: Ptr CFloat)) (CFloat (zero))+    poke ((p `plusPtr` 20 :: Ptr CFloat)) (CFloat (zero))+    f++instance FromCStruct AabbPositionsKHR where+  peekCStruct p = do+    minX <- peek @CFloat ((p `plusPtr` 0 :: Ptr CFloat))+    minY <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))+    minZ <- peek @CFloat ((p `plusPtr` 8 :: Ptr CFloat))+    maxX <- peek @CFloat ((p `plusPtr` 12 :: Ptr CFloat))+    maxY <- peek @CFloat ((p `plusPtr` 16 :: Ptr CFloat))+    maxZ <- peek @CFloat ((p `plusPtr` 20 :: Ptr CFloat))+    pure $ AabbPositionsKHR+             ((\(CFloat a) -> a) minX) ((\(CFloat a) -> a) minY) ((\(CFloat a) -> a) minZ) ((\(CFloat a) -> a) maxX) ((\(CFloat a) -> a) maxY) ((\(CFloat a) -> a) maxZ)++instance Storable AabbPositionsKHR where+  sizeOf ~_ = 24+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero AabbPositionsKHR where+  zero = AabbPositionsKHR+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkTransformMatrixKHR - Structure specifying a 3x4 affine transformation+-- matrix+--+-- = See Also+--+-- 'AccelerationStructureInstanceKHR'+data TransformMatrixKHR = TransformMatrixKHR+  { -- | @matrix@ is a 3x4 row-major affine transformation matrix.+    matrix :: ((Float, Float, Float, Float), (Float, Float, Float, Float), (Float, Float, Float, Float)) }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (TransformMatrixKHR)+#endif+deriving instance Show TransformMatrixKHR++instance ToCStruct TransformMatrixKHR where+  withCStruct x f = allocaBytesAligned 48 4 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p TransformMatrixKHR{..} f = do+    let pMatrix' = lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))+    case (matrix) of+      (e0, e1, e2) -> do+        let pMatrix0 = lowerArrayPtr (pMatrix' :: Ptr (FixedArray 4 CFloat))+        case (e0) of+          (e0', e1', e2', e3) -> do+            poke (pMatrix0 :: Ptr CFloat) (CFloat (e0'))+            poke (pMatrix0 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))+            poke (pMatrix0 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))+            poke (pMatrix0 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+        let pMatrix1 = lowerArrayPtr (pMatrix' `plusPtr` 16 :: Ptr (FixedArray 4 CFloat))+        case (e1) of+          (e0', e1', e2', e3) -> do+            poke (pMatrix1 :: Ptr CFloat) (CFloat (e0'))+            poke (pMatrix1 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))+            poke (pMatrix1 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))+            poke (pMatrix1 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+        let pMatrix2 = lowerArrayPtr (pMatrix' `plusPtr` 32 :: Ptr (FixedArray 4 CFloat))+        case (e2) of+          (e0', e1', e2', e3) -> do+            poke (pMatrix2 :: Ptr CFloat) (CFloat (e0'))+            poke (pMatrix2 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))+            poke (pMatrix2 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))+            poke (pMatrix2 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+        pure $ ()+    f+  cStructSize = 48+  cStructAlignment = 4+  pokeZeroCStruct p f = do+    let pMatrix' = lowerArrayPtr ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))+    case (((zero, zero, zero, zero), (zero, zero, zero, zero), (zero, zero, zero, zero))) of+      (e0, e1, e2) -> do+        let pMatrix0 = lowerArrayPtr (pMatrix' :: Ptr (FixedArray 4 CFloat))+        case (e0) of+          (e0', e1', e2', e3) -> do+            poke (pMatrix0 :: Ptr CFloat) (CFloat (e0'))+            poke (pMatrix0 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))+            poke (pMatrix0 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))+            poke (pMatrix0 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+        let pMatrix1 = lowerArrayPtr (pMatrix' `plusPtr` 16 :: Ptr (FixedArray 4 CFloat))+        case (e1) of+          (e0', e1', e2', e3) -> do+            poke (pMatrix1 :: Ptr CFloat) (CFloat (e0'))+            poke (pMatrix1 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))+            poke (pMatrix1 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))+            poke (pMatrix1 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+        let pMatrix2 = lowerArrayPtr (pMatrix' `plusPtr` 32 :: Ptr (FixedArray 4 CFloat))+        case (e2) of+          (e0', e1', e2', e3) -> do+            poke (pMatrix2 :: Ptr CFloat) (CFloat (e0'))+            poke (pMatrix2 `plusPtr` 4 :: Ptr CFloat) (CFloat (e1'))+            poke (pMatrix2 `plusPtr` 8 :: Ptr CFloat) (CFloat (e2'))+            poke (pMatrix2 `plusPtr` 12 :: Ptr CFloat) (CFloat (e3))+        pure $ ()+    f++instance FromCStruct TransformMatrixKHR where+  peekCStruct p = do+    let pmatrix = lowerArrayPtr @(FixedArray 4 CFloat) ((p `plusPtr` 0 :: Ptr (FixedArray 3 (FixedArray 4 CFloat))))+    let pmatrix0 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 0 :: Ptr (FixedArray 4 CFloat)))+    matrix00 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 0 :: Ptr CFloat))+    matrix01 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 4 :: Ptr CFloat))+    matrix02 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 8 :: Ptr CFloat))+    matrix03 <- peek @CFloat ((pmatrix0 `advancePtrBytes` 12 :: Ptr CFloat))+    let pmatrix1 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 16 :: Ptr (FixedArray 4 CFloat)))+    matrix10 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 0 :: Ptr CFloat))+    matrix11 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 4 :: Ptr CFloat))+    matrix12 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 8 :: Ptr CFloat))+    matrix13 <- peek @CFloat ((pmatrix1 `advancePtrBytes` 12 :: Ptr CFloat))+    let pmatrix2 = lowerArrayPtr @CFloat ((pmatrix `advancePtrBytes` 32 :: Ptr (FixedArray 4 CFloat)))+    matrix20 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 0 :: Ptr CFloat))+    matrix21 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 4 :: Ptr CFloat))+    matrix22 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 8 :: Ptr CFloat))+    matrix23 <- peek @CFloat ((pmatrix2 `advancePtrBytes` 12 :: Ptr CFloat))+    pure $ TransformMatrixKHR+             ((((((\(CFloat a) -> a) matrix00), ((\(CFloat a) -> a) matrix01), ((\(CFloat a) -> a) matrix02), ((\(CFloat a) -> a) matrix03))), ((((\(CFloat a) -> a) matrix10), ((\(CFloat a) -> a) matrix11), ((\(CFloat a) -> a) matrix12), ((\(CFloat a) -> a) matrix13))), ((((\(CFloat a) -> a) matrix20), ((\(CFloat a) -> a) matrix21), ((\(CFloat a) -> a) matrix22), ((\(CFloat a) -> a) matrix23)))))++instance Storable TransformMatrixKHR where+  sizeOf ~_ = 48+  alignment ~_ = 4+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero TransformMatrixKHR where+  zero = TransformMatrixKHR+           ((zero, zero, zero, zero), (zero, zero, zero, zero), (zero, zero, zero, zero))+++-- | VkAccelerationStructureInstanceKHR - Structure specifying a single+-- acceleration structure instance for building into an acceleration+-- structure geometry+--+-- = Description+--+-- The C language spec does not define the ordering of bit-fields, but in+-- practice, this struct produces the correct layout with existing+-- compilers. The intended bit pattern is for the following:+--+-- If a compiler produces code that diverges from that pattern,+-- applications /must/ employ another method to set values according to the+-- correct bit pattern.+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'GeometryInstanceFlagsKHR', 'TransformMatrixKHR'+data AccelerationStructureInstanceKHR = AccelerationStructureInstanceKHR+  { -- | @transform@ is a 'TransformMatrixKHR' structure describing a+    -- transformation to be applied to the acceleration structure.+    transform :: TransformMatrixKHR+  , -- | @instanceCustomIndex@ is a 24-bit user-specified index value accessible+    -- to ray shaders in the @InstanceCustomIndexKHR@ built-in.+    --+    -- @instanceCustomIndex@ and @mask@ occupy the same memory as if a single+    -- @int32_t@ was specified in their place+    --+    -- -   @instanceCustomIndex@ occupies the 24 least significant bits of that+    --     memory+    --+    -- -   @mask@ occupies the 8 most significant bits of that memory+    instanceCustomIndex :: Word32+  , -- | @mask@ is an 8-bit visibility mask for the geometry. The instance /may/+    -- only be hit if @rayMask & instance.mask != 0@+    mask :: Word32+  , -- | @instanceShaderBindingTableRecordOffset@ is a 24-bit offset used in+    -- calculating the hit shader binding table index.+    --+    -- @instanceShaderBindingTableRecordOffset@ and @flags@ occupy the same+    -- memory as if a single @int32_t@ was specified in their place+    --+    -- -   @instanceShaderBindingTableRecordOffset@ occupies the 24 least+    --     significant bits of that memory+    --+    -- -   @flags@ occupies the 8 most significant bits of that memory+    instanceShaderBindingTableRecordOffset :: Word32+  , -- | @flags@ is an 8-bit mask of 'GeometryInstanceFlagBitsKHR' values to+    -- apply to this instance.+    --+    -- #VUID-VkAccelerationStructureInstanceKHR-flags-parameter# @flags@ /must/+    -- be a valid combination of 'GeometryInstanceFlagBitsKHR' values+    flags :: GeometryInstanceFlagsKHR+  , -- | @accelerationStructureReference@ is either:+    --+    -- -   a device address containing the value obtained from+    --     'getAccelerationStructureDeviceAddressKHR' or+    --     'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV'+    --     (used by device operations which reference acceleration structures)+    --     or,+    --+    -- -   a 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object (used+    --     by host operations which reference acceleration structures).+    accelerationStructureReference :: Word64+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureInstanceKHR)+#endif+deriving instance Show AccelerationStructureInstanceKHR++instance ToCStruct AccelerationStructureInstanceKHR where+  withCStruct x f = allocaBytesAligned 64 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureInstanceKHR{..} f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (transform) . ($ ())+    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (((coerce @_ @Word32 (mask)) `shiftL` 24) .|. (instanceCustomIndex))+    lift $ poke ((p `plusPtr` 52 :: Ptr Word32)) (((coerce @_ @Word32 (flags)) `shiftL` 24) .|. (instanceShaderBindingTableRecordOffset))+    lift $ poke ((p `plusPtr` 56 :: Ptr Word64)) (accelerationStructureReference)+    lift $ f+  cStructSize = 64+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    ContT $ pokeCStruct ((p `plusPtr` 0 :: Ptr TransformMatrixKHR)) (zero) . ($ ())+    lift $ poke ((p `plusPtr` 56 :: Ptr Word64)) (zero)+    lift $ f++instance FromCStruct AccelerationStructureInstanceKHR where+  peekCStruct p = do+    transform <- peekCStruct @TransformMatrixKHR ((p `plusPtr` 0 :: Ptr TransformMatrixKHR))+    instanceCustomIndex <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))+    let instanceCustomIndex' = ((instanceCustomIndex .&. coerce @Word32 0xffffff))+    mask <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))+    let mask' = ((((mask `shiftR` 24)) .&. coerce @Word32 0xff))+    instanceShaderBindingTableRecordOffset <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))+    let instanceShaderBindingTableRecordOffset' = ((instanceShaderBindingTableRecordOffset .&. coerce @Word32 0xffffff))+    flags <- peek @GeometryInstanceFlagsKHR ((p `plusPtr` 52 :: Ptr GeometryInstanceFlagsKHR))+    let flags' = ((((flags `shiftR` 24)) .&. coerce @Word32 0xff))+    accelerationStructureReference <- peek @Word64 ((p `plusPtr` 56 :: Ptr Word64))+    pure $ AccelerationStructureInstanceKHR+             transform instanceCustomIndex' mask' instanceShaderBindingTableRecordOffset' flags' accelerationStructureReference++instance Zero AccelerationStructureInstanceKHR where+  zero = AccelerationStructureInstanceKHR+           zero+           zero+           zero+           zero+           zero+           zero+++-- | VkAccelerationStructureDeviceAddressInfoKHR - Structure specifying the+-- acceleration structure to query an address for+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'getAccelerationStructureDeviceAddressKHR'+data AccelerationStructureDeviceAddressInfoKHR = AccelerationStructureDeviceAddressInfoKHR+  { -- | @accelerationStructure@ specifies the acceleration structure whose+    -- address is being queried.+    --+    -- #VUID-VkAccelerationStructureDeviceAddressInfoKHR-accelerationStructure-parameter#+    -- @accelerationStructure@ /must/ be a valid+    -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+    accelerationStructure :: AccelerationStructureKHR }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureDeviceAddressInfoKHR)+#endif+deriving instance Show AccelerationStructureDeviceAddressInfoKHR++instance ToCStruct AccelerationStructureDeviceAddressInfoKHR where+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureDeviceAddressInfoKHR{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (accelerationStructure)+    f+  cStructSize = 24+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)+    f++instance FromCStruct AccelerationStructureDeviceAddressInfoKHR where+  peekCStruct p = do+    accelerationStructure <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))+    pure $ AccelerationStructureDeviceAddressInfoKHR+             accelerationStructure++instance Storable AccelerationStructureDeviceAddressInfoKHR where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero AccelerationStructureDeviceAddressInfoKHR where+  zero = AccelerationStructureDeviceAddressInfoKHR+           zero+++-- | VkAccelerationStructureVersionKHR - Acceleration structure version+-- information+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'getDeviceAccelerationStructureCompatibilityKHR'+data AccelerationStructureVersionKHR = AccelerationStructureVersionKHR+  { -- | @versionData@ is a pointer to the version header as defined in+    -- 'CopyAccelerationStructureModeKHR'+    --+    -- #VUID-VkAccelerationStructureVersionKHR-versionData-parameter#+    -- @versionData@ /must/ be a valid pointer to an array of @2@*VK_UUID_SIZE+    -- @uint8_t@ values+    versionData :: ByteString }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (AccelerationStructureVersionKHR)+#endif+deriving instance Show AccelerationStructureVersionKHR++instance ToCStruct AccelerationStructureVersionKHR where+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p AccelerationStructureVersionKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    lift $ unless (Data.ByteString.length (versionData) == 2 * UUID_SIZE) $+      throwIO $ IOError Nothing InvalidArgument "" "AccelerationStructureVersionKHR::versionData must be 2*VK_UUID_SIZE bytes" Nothing Nothing+    versionData'' <- fmap (castPtr @CChar @Word8) . ContT $ unsafeUseAsCString (versionData)+    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr Word8))) versionData''+    lift $ f+  cStructSize = 24+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    f++instance FromCStruct AccelerationStructureVersionKHR where+  peekCStruct p = do+    versionData <- peek @(Ptr Word8) ((p `plusPtr` 16 :: Ptr (Ptr Word8)))+    versionData' <- packCStringLen (castPtr @Word8 @CChar versionData, 2 * UUID_SIZE)+    pure $ AccelerationStructureVersionKHR+             versionData'++instance Zero AccelerationStructureVersionKHR where+  zero = AccelerationStructureVersionKHR+           mempty+++-- | VkCopyAccelerationStructureInfoKHR - Parameters for copying an+-- acceleration structure+--+-- == Valid Usage+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-mode-03410# @mode@ /must/+--     be 'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' or+--     'COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR'+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-src-03411# @src@ /must/+--     have been built with+--     'BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' if @mode@ is+--     'COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-sType-sType# @sType@ /must/+--     be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR'+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-pNext-pNext# @pNext@ /must/+--     be @NULL@ or a pointer to a valid instance of+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-src-parameter# @src@ /must/+--     be a valid 'Vulkan.Extensions.Handles.AccelerationStructureKHR'+--     handle+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-dst-parameter# @dst@ /must/+--     be a valid 'Vulkan.Extensions.Handles.AccelerationStructureKHR'+--     handle+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-mode-parameter# @mode@+--     /must/ be a valid 'CopyAccelerationStructureModeKHR' value+--+-- -   #VUID-VkCopyAccelerationStructureInfoKHR-commonparent# Both of+--     @dst@, and @src@ /must/ have been created, allocated, or retrieved+--     from the same 'Vulkan.Core10.Handles.Device'+--+-- = See Also+--+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'CopyAccelerationStructureModeKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'cmdCopyAccelerationStructureKHR', 'copyAccelerationStructureKHR'+data CopyAccelerationStructureInfoKHR (es :: [Type]) = CopyAccelerationStructureInfoKHR+  { -- No documentation found for Nested "VkCopyAccelerationStructureInfoKHR" "pNext"+    next :: Chain es+  , -- | @src@ is the source acceleration structure for the copy.+    src :: AccelerationStructureKHR+  , -- | @dst@ is the target acceleration structure for the copy.+    dst :: AccelerationStructureKHR+  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies+    -- additional operations to perform during the copy.+    mode :: CopyAccelerationStructureModeKHR+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (CopyAccelerationStructureInfoKHR (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (CopyAccelerationStructureInfoKHR es)++instance Extensible CopyAccelerationStructureInfoKHR where+  extensibleType = STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR+  setNext x next = x{next = next}+  getNext CopyAccelerationStructureInfoKHR{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyAccelerationStructureInfoKHR e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f+    | otherwise = Nothing++instance (Extendss CopyAccelerationStructureInfoKHR es, PokeChain es) => ToCStruct (CopyAccelerationStructureInfoKHR es) where+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p CopyAccelerationStructureInfoKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (src)+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (dst)+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)+    lift $ f+  cStructSize = 40+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)+    lift $ poke ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR)) (zero)+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)+    lift $ f++instance (Extendss CopyAccelerationStructureInfoKHR es, PeekChain es) => FromCStruct (CopyAccelerationStructureInfoKHR es) where+  peekCStruct p = do+    pNext <- peek @(Ptr ()) ((p `plusPtr` 8 :: Ptr (Ptr ())))+    next <- peekChain (castPtr pNext)+    src <- peek @AccelerationStructureKHR ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR))+    dst <- peek @AccelerationStructureKHR ((p `plusPtr` 24 :: Ptr AccelerationStructureKHR))+    mode <- peek @CopyAccelerationStructureModeKHR ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR))+    pure $ CopyAccelerationStructureInfoKHR+             next src dst mode++instance es ~ '[] => Zero (CopyAccelerationStructureInfoKHR es) where+  zero = CopyAccelerationStructureInfoKHR+           ()+           zero+           zero+           zero+++-- | VkCopyAccelerationStructureToMemoryInfoKHR - Parameters for serializing+-- an acceleration structure+--+-- == Valid Usage+--+-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-03561# The+--     memory pointed to by @dst@ /must/ be at least as large as the+--     serialization size of @src@, as reported by+--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR'+--+-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-03412# @mode@+--     /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-sType-sType#+--     @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR'+--+-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-pNext-pNext#+--     @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--+-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-sType-unique# The+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-src-parameter#+--     @src@ /must/ be a valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+--+-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-dst-parameter#+--     @dst@ /must/ be a valid 'DeviceOrHostAddressKHR' union+--+-- -   #VUID-VkCopyAccelerationStructureToMemoryInfoKHR-mode-parameter#+--     @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value+--+-- = See Also+--+-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR',+-- 'CopyAccelerationStructureModeKHR', 'DeviceOrHostAddressKHR',+-- 'Vulkan.Core10.Enums.StructureType.StructureType',+-- 'cmdCopyAccelerationStructureToMemoryKHR',+-- 'copyAccelerationStructureToMemoryKHR'+data CopyAccelerationStructureToMemoryInfoKHR (es :: [Type]) = CopyAccelerationStructureToMemoryInfoKHR+  { -- No documentation found for Nested "VkCopyAccelerationStructureToMemoryInfoKHR" "pNext"+    next :: Chain es+  , -- | @src@ is the source acceleration structure for the copy+    src :: AccelerationStructureKHR+  , -- | @dst@ is the device or host address to memory which is the target for+    -- the copy+    dst :: DeviceOrHostAddressKHR+  , -- | @mode@ is a 'CopyAccelerationStructureModeKHR' value that specifies+    -- additional operations to perform during the copy.+    mode :: CopyAccelerationStructureModeKHR+  }+  deriving (Typeable)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (CopyAccelerationStructureToMemoryInfoKHR (es :: [Type]))+#endif+deriving instance Show (Chain es) => Show (CopyAccelerationStructureToMemoryInfoKHR es)++instance Extensible CopyAccelerationStructureToMemoryInfoKHR where+  extensibleType = STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR+  setNext x next = x{next = next}+  getNext CopyAccelerationStructureToMemoryInfoKHR{..} = next+  extends :: forall e b proxy. Typeable e => proxy e -> (Extends CopyAccelerationStructureToMemoryInfoKHR e => b) -> Maybe b+  extends _ f+    | Just Refl <- eqT @e @DeferredOperationInfoKHR = Just f+    | otherwise = Nothing++instance (Extendss CopyAccelerationStructureToMemoryInfoKHR es, PokeChain es) => ToCStruct (CopyAccelerationStructureToMemoryInfoKHR es) where+  withCStruct x f = allocaBytesAligned 40 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p CopyAccelerationStructureToMemoryInfoKHR{..} f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)+    pNext'' <- fmap castPtr . ContT $ withChain (next)+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (src)+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressKHR)) (dst) . ($ ())+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (mode)+    lift $ f+  cStructSize = 40+  cStructAlignment = 8+  pokeZeroCStruct p f = evalContT $ do+    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR)+    pNext' <- fmap castPtr . ContT $ withZeroChain @es+    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'+    lift $ poke ((p `plusPtr` 16 :: Ptr AccelerationStructureKHR)) (zero)+    ContT $ pokeCStruct ((p `plusPtr` 24 :: Ptr DeviceOrHostAddressKHR)) (zero) . ($ ())+    lift $ poke ((p `plusPtr` 32 :: Ptr CopyAccelerationStructureModeKHR)) (zero)+    lift $ f++instance es ~ '[] => Zero (CopyAccelerationStructureToMemoryInfoKHR es) where+  zero = CopyAccelerationStructureToMemoryInfoKHR+           ()+           zero+           zero+           zero+++-- | VkCopyMemoryToAccelerationStructureInfoKHR - Parameters for+-- deserializing an acceleration structure+--+-- == Valid Usage+--+-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-03413# @mode@+--     /must/ be 'COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR'+--+-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pInfo-03414# The+--     data in @pInfo->src@ /must/ have a format compatible with the+--     destination physical device as returned by+--     'getDeviceAccelerationStructureCompatibilityKHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-sType-sType#+--     @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR'+--+-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-pNext-pNext#+--     @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+--     'Vulkan.Extensions.VK_KHR_deferred_host_operations.DeferredOperationInfoKHR'+--+-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-sType-unique# The+--     @sType@ value of each struct in the @pNext@ chain /must/ be unique+--+-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-src-parameter#+--     @src@ /must/ be a valid 'DeviceOrHostAddressConstKHR' union+--+-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-dst-parameter#+--     @dst@ /must/ be a valid+--     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+--+-- -   #VUID-VkCopyMemoryToAccelerationStructureInfoKHR-mode-parameter#+--     @mode@ /must/ be a valid 'CopyAccelerationStructureModeKHR' value -- -- = See Also --
src/Vulkan/Extensions/VK_KHR_shader_clock.hs view
@@ -48,11 +48,11 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderClockFeaturesKHR = PhysicalDeviceShaderClockFeaturesKHR-  { -- | @shaderSubgroupClock@ indicates whether shaders /can/ perform @Subgroup@-    -- scoped clock reads.+  { -- | #features-shaderSubgroupClock# @shaderSubgroupClock@ indicates whether+    -- shaders /can/ perform @Subgroup@ scoped clock reads.     shaderSubgroupClock :: Bool-  , -- | @shaderDeviceClock@ indicates whether shaders /can/ perform-    -- 'Vulkan.Core10.Handles.Device' scoped clock reads.+  , -- | #features-shaderDeviceClock# @shaderDeviceClock@ indicates whether+    -- shaders /can/ perform 'Vulkan.Core10.Handles.Device' scoped clock reads.     shaderDeviceClock :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_KHR_shader_terminate_invocation.hs view
@@ -54,9 +54,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderTerminateInvocationFeaturesKHR = PhysicalDeviceShaderTerminateInvocationFeaturesKHR-  { -- | @shaderTerminateInvocation@ specifies whether the implementation-    -- supports SPIR-V modules that use the @SPV_KHR_terminate_invocation@-    -- extension.+  { -- | #features-shaderTerminateInvocation# @shaderTerminateInvocation@+    -- specifies whether the implementation supports SPIR-V modules that use+    -- the @SPV_KHR_terminate_invocation@ extension.     shaderTerminateInvocation :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs view
@@ -61,14 +61,15 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetSwapchainStatusKHR-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @swapchain@ /must/ be a valid---     'Vulkan.Extensions.Handles.SwapchainKHR' handle+-- -   #VUID-vkGetSwapchainStatusKHR-swapchain-parameter# @swapchain@+--     /must/ be a valid 'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   Both of @device@, and @swapchain@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetSwapchainStatusKHR-commonparent# Both of @device@, and+--     @swapchain@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Instance' -- -- == Host Synchronization --
src/Vulkan/Extensions/VK_KHR_surface.hs view
@@ -154,30 +154,35 @@ -- -- == Valid Usage ----- -   All 'Vulkan.Extensions.Handles.SwapchainKHR' objects created for+-- -   #VUID-vkDestroySurfaceKHR-surface-01266# All+--     'Vulkan.Extensions.Handles.SwapchainKHR' objects created for --     @surface@ /must/ have been destroyed prior to destroying @surface@ ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroySurfaceKHR-surface-01267# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @surface@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroySurfaceKHR-surface-01268# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @surface@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkDestroySurfaceKHR-instance-parameter# @instance@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Instance' handle ----- -   If @surface@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'---     handle+-- -   #VUID-vkDestroySurfaceKHR-surface-parameter# If @surface@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @surface@ /must/ be a+--     valid 'Vulkan.Extensions.Handles.SurfaceKHR' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroySurfaceKHR-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   If @surface@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @instance@+-- -   #VUID-vkDestroySurfaceKHR-surface-parent# If @surface@ is a valid+--     handle, it /must/ have been created, allocated, or retrieved from+--     @instance@ -- -- == Host Synchronization --@@ -222,25 +227,29 @@ -- -- == Valid Usage ----- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@+-- -   #VUID-vkGetPhysicalDeviceSurfaceSupportKHR-queueFamilyIndex-01269#+--     @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@ --     returned by --     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties' --     for the given @physicalDevice@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSurfaceSupportKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'+-- -   #VUID-vkGetPhysicalDeviceSurfaceSupportKHR-surface-parameter#+--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' --     handle ----- -   @pSupported@ /must/ be a valid pointer to a+-- -   #VUID-vkGetPhysicalDeviceSurfaceSupportKHR-pSupported-parameter#+--     @pSupported@ /must/ be a valid pointer to a --     'Vulkan.Core10.FundamentalTypes.Bool32' value ----- -   Both of @physicalDevice@, and @surface@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetPhysicalDeviceSurfaceSupportKHR-commonparent# Both of+--     @physicalDevice@, and @surface@ /must/ have been created, allocated,+--     or retrieved from the same 'Vulkan.Core10.Handles.Instance' -- -- == Return Codes --@@ -293,16 +302,20 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-parameter#+--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' --     handle ----- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-pSurfaceCapabilities-parameter#+--     @pSurfaceCapabilities@ /must/ be a valid pointer to a --     'SurfaceCapabilitiesKHR' structure ----- -   Both of @physicalDevice@, and @surface@ /must/ have been created,+-- -   #VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-commonparent# Both+--     of @physicalDevice@, and @surface@ /must/ have been created, --     allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Instance' --@@ -386,29 +399,34 @@ -- -- == Valid Usage ----- -   @surface@ /must/ be supported by @physicalDevice@, as reported by+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-surface-02739# @surface@+--     /must/ be supported by @physicalDevice@, as reported by --     'getPhysicalDeviceSurfaceSupportKHR' or an equivalent --     platform-specific mechanism -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-surface-parameter#+--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' --     handle ----- -   @pSurfaceFormatCount@ /must/ be a valid pointer to a @uint32_t@+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-pSurfaceFormatCount-parameter#+--     @pSurfaceFormatCount@ /must/ be a valid pointer to a @uint32_t@ --     value ----- -   If the value referenced by @pSurfaceFormatCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-pSurfaceFormats-parameter#+--     If the value referenced by @pSurfaceFormatCount@ is not @0@, and --     @pSurfaceFormats@ is not @NULL@, @pSurfaceFormats@ /must/ be a valid --     pointer to an array of @pSurfaceFormatCount@ 'SurfaceFormatKHR' --     structures ----- -   Both of @physicalDevice@, and @surface@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-commonparent# Both of+--     @physicalDevice@, and @surface@ /must/ have been created, allocated,+--     or retrieved from the same 'Vulkan.Core10.Handles.Instance' -- -- == Return Codes --@@ -485,19 +503,24 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-surface-parameter#+--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' --     handle ----- -   @pPresentModeCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-pPresentModeCount-parameter#+--     @pPresentModeCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPresentModeCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-pPresentModes-parameter#+--     If the value referenced by @pPresentModeCount@ is not @0@, and --     @pPresentModes@ is not @NULL@, @pPresentModes@ /must/ be a valid --     pointer to an array of @pPresentModeCount@ 'PresentModeKHR' values ----- -   Both of @physicalDevice@, and @surface@ /must/ have been created,+-- -   #VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-commonparent# Both+--     of @physicalDevice@, and @surface@ /must/ have been created, --     allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Instance' --
src/Vulkan/Extensions/VK_KHR_swapchain.hs view
@@ -227,17 +227,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateSwapchainKHR-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'SwapchainCreateInfoKHR' structure+-- -   #VUID-vkCreateSwapchainKHR-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'SwapchainCreateInfoKHR'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateSwapchainKHR-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSwapchain@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.SwapchainKHR' handle+-- -   #VUID-vkCreateSwapchainKHR-pSwapchain-parameter# @pSwapchain@ /must/+--     be a valid pointer to a 'Vulkan.Extensions.Handles.SwapchainKHR'+--     handle -- -- == Host Synchronization --@@ -350,31 +353,35 @@ -- -- == Valid Usage ----- -   All uses of presentable images acquired from @swapchain@ /must/ have---     completed execution+-- -   #VUID-vkDestroySwapchainKHR-swapchain-01282# All uses of presentable+--     images acquired from @swapchain@ /must/ have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroySwapchainKHR-swapchain-01283# If+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @swapchain@ was created, a compatible set of callbacks --     /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroySwapchainKHR-swapchain-01284# If no+--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @swapchain@ was created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroySwapchainKHR-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @swapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @swapchain@ /must/ be a valid---     'Vulkan.Extensions.Handles.SwapchainKHR' handle+-- -   #VUID-vkDestroySwapchainKHR-swapchain-parameter# If @swapchain@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @swapchain@ /must/ be+--     a valid 'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkDestroySwapchainKHR-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   Both of @device@, and @swapchain@ that are valid handles of---     non-ignored parameters /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkDestroySwapchainKHR-commonparent# Both of @device@, and+--     @swapchain@ that are valid handles of non-ignored parameters /must/+--     have been created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Instance' -- -- == Host Synchronization --@@ -435,22 +442,25 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetSwapchainImagesKHR-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @swapchain@ /must/ be a valid---     'Vulkan.Extensions.Handles.SwapchainKHR' handle+-- -   #VUID-vkGetSwapchainImagesKHR-swapchain-parameter# @swapchain@+--     /must/ be a valid 'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   @pSwapchainImageCount@ /must/ be a valid pointer to a @uint32_t@+-- -   #VUID-vkGetSwapchainImagesKHR-pSwapchainImageCount-parameter#+--     @pSwapchainImageCount@ /must/ be a valid pointer to a @uint32_t@ --     value ----- -   If the value referenced by @pSwapchainImageCount@ is not @0@, and+-- -   #VUID-vkGetSwapchainImagesKHR-pSwapchainImages-parameter# If the+--     value referenced by @pSwapchainImageCount@ is not @0@, and --     @pSwapchainImages@ is not @NULL@, @pSwapchainImages@ /must/ be a --     valid pointer to an array of @pSwapchainImageCount@ --     'Vulkan.Core10.Handles.Image' handles ----- -   Both of @device@, and @swapchain@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetSwapchainImagesKHR-commonparent# Both of @device@, and+--     @swapchain@ /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Instance' -- -- == Return Codes --@@ -542,59 +552,68 @@ -- -- == Valid Usage ----- -   @swapchain@ /must/ not be in the retired state+-- -   #VUID-vkAcquireNextImageKHR-swapchain-01285# @swapchain@ /must/ not+--     be in the retired state ----- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it---     /must/ be unsignaled+-- -   #VUID-vkAcquireNextImageKHR-semaphore-01286# If @semaphore@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ be unsignaled ----- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it---     /must/ not have any uncompleted signal or wait operations pending+-- -   #VUID-vkAcquireNextImageKHR-semaphore-01779# If @semaphore@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ not have any+--     uncompleted signal or wait operations pending ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/---     be unsignaled and /must/ not be associated with any other queue---     command that has not yet completed execution on that queue+-- -   #VUID-vkAcquireNextImageKHR-fence-01287# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ be unsignaled and+--     /must/ not be associated with any other queue command that has not+--     yet completed execution on that queue ----- -   @semaphore@ and @fence@ /must/ not both be equal to---     'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- -   #VUID-vkAcquireNextImageKHR-semaphore-01780# @semaphore@ and @fence@+--     /must/ not both be equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If the number of currently acquired images is greater than the---     difference between the number of images in @swapchain@ and the value---     of+-- -   #VUID-vkAcquireNextImageKHR-swapchain-01802# If the number of+--     currently acquired images is greater than the difference between the+--     number of images in @swapchain@ and the value of --     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@ --     as returned by a call to --     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR' --     with the @surface@ used to create @swapchain@, @timeout@ /must/ not --     be @UINT64_MAX@ ----- -   @semaphore@ /must/ have a---     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of+-- -   #VUID-vkAcquireNextImageKHR-semaphore-03265# @semaphore@ /must/ have+--     a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkAcquireNextImageKHR-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @swapchain@ /must/ be a valid---     'Vulkan.Extensions.Handles.SwapchainKHR' handle+-- -   #VUID-vkAcquireNextImageKHR-swapchain-parameter# @swapchain@ /must/+--     be a valid 'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'---     handle+-- -   #VUID-vkAcquireNextImageKHR-semaphore-parameter# If @semaphore@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @semaphore@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Semaphore' handle ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-vkAcquireNextImageKHR-fence-parameter# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be a valid+--     'Vulkan.Core10.Handles.Fence' handle ----- -   @pImageIndex@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkAcquireNextImageKHR-pImageIndex-parameter# @pImageIndex@+--     /must/ be a valid pointer to a @uint32_t@ value ----- -   If @semaphore@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkAcquireNextImageKHR-semaphore-parent# If @semaphore@ is a+--     valid handle, it /must/ have been created, allocated, or retrieved+--     from @device@ ----- -   If @fence@ is a valid handle, it /must/ have been created,---     allocated, or retrieved from @device@+-- -   #VUID-vkAcquireNextImageKHR-fence-parent# If @fence@ is a valid+--     handle, it /must/ have been created, allocated, or retrieved from+--     @device@ ----- -   Both of @device@, and @swapchain@ that are valid handles of---     non-ignored parameters /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkAcquireNextImageKHR-commonparent# Both of @device@, and+--     @swapchain@ that are valid handles of non-ignored parameters /must/+--     have been created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Instance' -- -- == Host Synchronization --@@ -694,34 +713,38 @@ -- -- == Valid Usage ----- -   Each element of @pSwapchains@ member of @pPresentInfo@ /must/ be a---     swapchain that is created for a surface for which presentation is---     supported from @queue@ as determined using a call to+-- -   #VUID-vkQueuePresentKHR-pSwapchains-01292# Each element of+--     @pSwapchains@ member of @pPresentInfo@ /must/ be a swapchain that is+--     created for a surface for which presentation is supported from+--     @queue@ as determined using a call to --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR' ----- -   If more than one member of @pSwapchains@ was created from a display---     surface, all display surfaces referenced that refer to the same---     display /must/ use the same display mode+-- -   #VUID-vkQueuePresentKHR-pSwapchains-01293# If more than one member+--     of @pSwapchains@ was created from a display surface, all display+--     surfaces referenced that refer to the same display /must/ use the+--     same display mode ----- -   When a semaphore wait operation referring to a binary semaphore---     defined by the elements of the @pWaitSemaphores@ member of---     @pPresentInfo@ executes on @queue@, there /must/ be no other queues---     waiting on the same semaphore+-- -   #VUID-vkQueuePresentKHR-pWaitSemaphores-01294# When a semaphore wait+--     operation referring to a binary semaphore defined by the elements of+--     the @pWaitSemaphores@ member of @pPresentInfo@ executes on @queue@,+--     there /must/ be no other queues waiting on the same semaphore ----- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@---     /must/ be semaphores that are signaled, or have+-- -   #VUID-vkQueuePresentKHR-pWaitSemaphores-01295# All elements of the+--     @pWaitSemaphores@ member of @pPresentInfo@ /must/ be semaphores that+--     are signaled, or have --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-semaphores-signaling semaphore signal operations> --     previously submitted for execution ----- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@---     /must/ be created with a+-- -   #VUID-vkQueuePresentKHR-pWaitSemaphores-03267# All elements of the+--     @pWaitSemaphores@ member of @pPresentInfo@ /must/ be created with a --     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' ----- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@---     /must/ reference a semaphore signal operation that has been---     submitted for execution and any semaphore signal operations on which---     it depends (if any) /must/ have also been submitted for execution+-- -   #VUID-vkQueuePresentKHR-pWaitSemaphores-03268# All elements of the+--     @pWaitSemaphores@ member of @pPresentInfo@ /must/ reference a+--     semaphore signal operation that has been submitted for execution and+--     any semaphore signal operations on which it depends (if any) /must/+--     have also been submitted for execution -- -- Any writes to memory backing the images referenced by the -- @pImageIndices@ and @pSwapchains@ members of @pPresentInfo@, that are@@ -777,10 +800,11 @@ -- -- == Valid Usage (Implicit) ----- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+-- -   #VUID-vkQueuePresentKHR-queue-parameter# @queue@ /must/ be a valid+--     'Vulkan.Core10.Handles.Queue' handle ----- -   @pPresentInfo@ /must/ be a valid pointer to a valid 'PresentInfoKHR'---     structure+-- -   #VUID-vkQueuePresentKHR-pPresentInfo-parameter# @pPresentInfo@+--     /must/ be a valid pointer to a valid 'PresentInfoKHR' structure -- -- == Host Synchronization --@@ -876,7 +900,8 @@                                       . (MonadIO io)                                      => -- | @device@ is the logical device.                                         ---                                        -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                        -- #VUID-vkGetDeviceGroupPresentCapabilitiesKHR-device-parameter# @device@+                                        -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                         Device                                      -> io (DeviceGroupPresentCapabilitiesKHR) getDeviceGroupPresentCapabilitiesKHR device = liftIO . evalContT $ do@@ -910,16 +935,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetDeviceGroupSurfacePresentModesKHR-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'+-- -   #VUID-vkGetDeviceGroupSurfacePresentModesKHR-surface-parameter#+--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' --     handle ----- -   @pModes@ /must/ be a valid pointer to a+-- -   #VUID-vkGetDeviceGroupSurfacePresentModesKHR-pModes-parameter#+--     @pModes@ /must/ be a valid pointer to a --     'DeviceGroupPresentModeFlagsKHR' value ----- -   Both of @device@, and @surface@ /must/ have been created, allocated,---     or retrieved from the same 'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetDeviceGroupSurfacePresentModesKHR-commonparent# Both of+--     @device@, and @surface@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Instance' -- -- == Host Synchronization --@@ -1001,9 +1030,10 @@ -- -- == Valid Usage ----- -   If the number of currently acquired images is greater than the---     difference between the number of images in the @swapchain@ member of---     @pAcquireInfo@ and the value of+-- -   #VUID-vkAcquireNextImage2KHR-swapchain-01803# If the number of+--     currently acquired images is greater than the difference between the+--     number of images in the @swapchain@ member of @pAcquireInfo@ and the+--     value of --     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR'::@minImageCount@ --     as returned by a call to --     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR'@@ -1012,12 +1042,15 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkAcquireNextImage2KHR-device-parameter# @device@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pAcquireInfo@ /must/ be a valid pointer to a valid---     'AcquireNextImageInfoKHR' structure+-- -   #VUID-vkAcquireNextImage2KHR-pAcquireInfo-parameter# @pAcquireInfo@+--     /must/ be a valid pointer to a valid 'AcquireNextImageInfoKHR'+--     structure ----- -   @pImageIndex@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkAcquireNextImage2KHR-pImageIndex-parameter# @pImageIndex@+--     /must/ be a valid pointer to a @uint32_t@ value -- -- == Return Codes --@@ -1101,21 +1134,25 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDevicePresentRectanglesKHR-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'+-- -   #VUID-vkGetPhysicalDevicePresentRectanglesKHR-surface-parameter#+--     @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' --     handle ----- -   @pRectCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDevicePresentRectanglesKHR-pRectCount-parameter#+--     @pRectCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pRectCount@ is not @0@, and @pRects@ is---     not @NULL@, @pRects@ /must/ be a valid pointer to an array of+-- -   #VUID-vkGetPhysicalDevicePresentRectanglesKHR-pRects-parameter# If+--     the value referenced by @pRectCount@ is not @0@, and @pRects@ is not+--     @NULL@, @pRects@ /must/ be a valid pointer to an array of --     @pRectCount@ 'Vulkan.Core10.FundamentalTypes.Rect2D' structures ----- -   Both of @physicalDevice@, and @surface@ /must/ have been created,---     allocated, or retrieved from the same---     'Vulkan.Core10.Handles.Instance'+-- -   #VUID-vkGetPhysicalDevicePresentRectanglesKHR-commonparent# Both of+--     @physicalDevice@, and @surface@ /must/ have been created, allocated,+--     or retrieved from the same 'Vulkan.Core10.Handles.Instance' -- -- == Host Synchronization --@@ -1283,18 +1320,20 @@ -- -- == Valid Usage ----- -   @surface@ /must/ be a surface that is supported by the device as---     determined using+-- -   #VUID-VkSwapchainCreateInfoKHR-surface-01270# @surface@ /must/ be a+--     surface that is supported by the device as determined using --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceSupportKHR' ----- -   @minImageCount@ /must/ be less than or equal to the value returned---     in the @maxImageCount@ member of the+-- -   #VUID-VkSwapchainCreateInfoKHR-minImageCount-01272# @minImageCount@+--     /must/ be less than or equal to the value returned in the+--     @maxImageCount@ member of the --     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure --     returned by --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR' --     for the surface if the returned @maxImageCount@ is not zero ----- -   If @presentMode@ is not+-- -   #VUID-VkSwapchainCreateInfoKHR-presentMode-02839# If @presentMode@+--     is not --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' --     nor --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR',@@ -1305,37 +1344,41 @@ --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR' --     for the surface ----- -   @minImageCount@ /must/ be @1@ if @presentMode@ is either+-- -   #VUID-VkSwapchainCreateInfoKHR-minImageCount-01383# @minImageCount@+--     /must/ be @1@ if @presentMode@ is either --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' --     or --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR' ----- -   @imageFormat@ and @imageColorSpace@ /must/ match the @format@ and---     @colorSpace@ members, respectively, of one of the+-- -   #VUID-VkSwapchainCreateInfoKHR-imageFormat-01273# @imageFormat@ and+--     @imageColorSpace@ /must/ match the @format@ and @colorSpace@+--     members, respectively, of one of the --     'Vulkan.Extensions.VK_KHR_surface.SurfaceFormatKHR' structures --     returned by --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceFormatsKHR' --     for the surface ----- -   @imageExtent@ /must/ be between @minImageExtent@ and---     @maxImageExtent@, inclusive, where @minImageExtent@ and---     @maxImageExtent@ are members of the+-- -   #VUID-VkSwapchainCreateInfoKHR-imageExtent-01274# @imageExtent@+--     /must/ be between @minImageExtent@ and @maxImageExtent@, inclusive,+--     where @minImageExtent@ and @maxImageExtent@ are members of the --     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure --     returned by --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR' --     for the surface ----- -   @imageExtent@ members @width@ and @height@ /must/ both be non-zero+-- -   #VUID-VkSwapchainCreateInfoKHR-imageExtent-01689# @imageExtent@+--     members @width@ and @height@ /must/ both be non-zero ----- -   @imageArrayLayers@ /must/ be greater than @0@ and less than or equal+-- -   #VUID-VkSwapchainCreateInfoKHR-imageArrayLayers-01275#+--     @imageArrayLayers@ /must/ be greater than @0@ and less than or equal --     to the @maxImageArrayLayers@ member of the --     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure --     returned by --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR' --     for the surface ----- -   If @presentMode@ is---     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_IMMEDIATE_KHR',+-- -   #VUID-VkSwapchainCreateInfoKHR-presentMode-01427# If @presentMode@+--     is 'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_IMMEDIATE_KHR', --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_MAILBOX_KHR', --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_KHR' or --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_FIFO_RELAXED_KHR',@@ -1346,7 +1389,7 @@ --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR' --     for @surface@ ----- -   If @presentMode@ is+-- -   #VUID-VkSwapchainCreateInfoKHR-imageUsage-01384# If @presentMode@ is --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR' --     or --     'Vulkan.Extensions.VK_KHR_surface.PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR',@@ -1357,16 +1400,19 @@ --     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR' --     for @surface@ ----- -   If @imageSharingMode@ is+-- -   #VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277# If+--     @imageSharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', --     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of --     @queueFamilyIndexCount@ @uint32_t@ values ----- -   If @imageSharingMode@ is+-- -   #VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278# If+--     @imageSharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', --     @queueFamilyIndexCount@ /must/ be greater than @1@ ----- -   If @imageSharingMode@ is+-- -   #VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01428# If+--     @imageSharingMode@ is --     'Vulkan.Core10.Enums.SharingMode.SHARING_MODE_CONCURRENT', each --     element of @pQueueFamilyIndices@ /must/ be unique and /must/ be less --     than @pQueueFamilyPropertyCount@ returned by either@@ -1375,46 +1421,52 @@ --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceQueueFamilyProperties2' --     for the @physicalDevice@ that was used to create @device@ ----- -   @preTransform@ /must/ be one of the bits present in the---     @supportedTransforms@ member of the+-- -   #VUID-VkSwapchainCreateInfoKHR-preTransform-01279# @preTransform@+--     /must/ be one of the bits present in the @supportedTransforms@+--     member of the --     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure --     returned by --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR' --     for the surface ----- -   @compositeAlpha@ /must/ be one of the bits present in the+-- -   #VUID-VkSwapchainCreateInfoKHR-compositeAlpha-01280#+--     @compositeAlpha@ /must/ be one of the bits present in the --     @supportedCompositeAlpha@ member of the --     'Vulkan.Extensions.VK_KHR_surface.SurfaceCapabilitiesKHR' structure --     returned by --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfaceCapabilitiesKHR' --     for the surface ----- -   @presentMode@ /must/ be one of the+-- -   #VUID-VkSwapchainCreateInfoKHR-presentMode-01281# @presentMode@+--     /must/ be one of the --     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' values returned by --     'Vulkan.Extensions.VK_KHR_surface.getPhysicalDeviceSurfacePresentModesKHR' --     for the surface ----- -   If the logical device was created with+-- -   #VUID-VkSwapchainCreateInfoKHR-physicalDeviceCount-01429# If the+--     logical device was created with --     'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo'::@physicalDeviceCount@ --     equal to 1, @flags@ /must/ not contain --     'SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR' ----- -   If @oldSwapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @oldSwapchain@ /must/ be a non-retired swapchain associated with---     native window referred to by @surface@+-- -   #VUID-VkSwapchainCreateInfoKHR-oldSwapchain-01933# If @oldSwapchain@+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @oldSwapchain@+--     /must/ be a non-retired swapchain associated with native window+--     referred to by @surface@ ----- -   The+-- -   #VUID-VkSwapchainCreateInfoKHR-imageFormat-01778# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#swapchain-wsi-image-create-info implied image creation parameters> --     of the swapchain /must/ be supported as reported by --     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceImageFormatProperties' ----- -   If @flags@ contains 'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' then---     the @pNext@ chain /must/ include a+-- -   #VUID-VkSwapchainCreateInfoKHR-flags-03168# If @flags@ contains+--     'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' then the @pNext@ chain+--     /must/ include a --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo' --     structure with a @viewFormatCount@ greater than zero and --     @pViewFormats@ /must/ have an element equal to @imageFormat@ ----- -   If a+-- -   #VUID-VkSwapchainCreateInfoKHR-pNext-04099# If a --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo' --     structure was included in the @pNext@ chain and --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@viewFormatCount@@@ -1423,15 +1475,16 @@ --     /must/ be compatible with the @format@ as described in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-compatibility compatibility table> ----- -   If @flags@ does not contain---     'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' and the @pNext@ chain---     include a+-- -   #VUID-VkSwapchainCreateInfoKHR-flags-04100# If @flags@ does not+--     contain 'SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR' and the @pNext@+--     chain include a --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo' --     structure then --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo'::@viewFormatCount@ --     /must/ be @0@ or @1@ ----- -   If @flags@ contains 'SWAPCHAIN_CREATE_PROTECTED_BIT_KHR', then+-- -   #VUID-VkSwapchainCreateInfoKHR-flags-03187# If @flags@ contains+--     'SWAPCHAIN_CREATE_PROTECTED_BIT_KHR', then --     'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'::@supportsProtected@ --     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE' in the --     'Vulkan.Extensions.VK_KHR_surface_protected_capabilities.SurfaceProtectedCapabilitiesKHR'@@ -1439,7 +1492,8 @@ --     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.getPhysicalDeviceSurfaceCapabilities2KHR' --     for @surface@ ----- -   If the @pNext@ chain includes a+-- -   #VUID-VkSwapchainCreateInfoKHR-pNext-02679# If the @pNext@ chain+--     includes a --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT' --     structure with its @fullScreenExclusive@ member set to --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT',@@ -1450,12 +1504,13 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkSwapchainCreateInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR' ----- -   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 'DeviceGroupSwapchainCreateInfoKHR',+-- -   #VUID-VkSwapchainCreateInfoKHR-pNext-pNext# 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+--     'DeviceGroupSwapchainCreateInfoKHR', --     'Vulkan.Core12.Promoted_From_VK_KHR_image_format_list.ImageFormatListCreateInfo', --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveInfoEXT', --     'Vulkan.Extensions.VK_EXT_full_screen_exclusive.SurfaceFullScreenExclusiveWin32InfoEXT',@@ -1463,48 +1518,58 @@ --     or --     'Vulkan.Extensions.VK_AMD_display_native_hdr.SwapchainDisplayNativeHdrCreateInfoAMD' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkSwapchainCreateInfoKHR-sType-unique# The @sType@ value of+--     each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of---     'SwapchainCreateFlagBitsKHR' values+-- -   #VUID-VkSwapchainCreateInfoKHR-flags-parameter# @flags@ /must/ be a+--     valid combination of 'SwapchainCreateFlagBitsKHR' values ----- -   @surface@ /must/ be a valid 'Vulkan.Extensions.Handles.SurfaceKHR'---     handle+-- -   #VUID-VkSwapchainCreateInfoKHR-surface-parameter# @surface@ /must/+--     be a valid 'Vulkan.Extensions.Handles.SurfaceKHR' handle ----- -   @imageFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'---     value+-- -   #VUID-VkSwapchainCreateInfoKHR-imageFormat-parameter# @imageFormat@+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value ----- -   @imageColorSpace@ /must/ be a valid+-- -   #VUID-VkSwapchainCreateInfoKHR-imageColorSpace-parameter#+--     @imageColorSpace@ /must/ be a valid --     'Vulkan.Extensions.VK_KHR_surface.ColorSpaceKHR' value ----- -   @imageUsage@ /must/ be a valid combination of+-- -   #VUID-VkSwapchainCreateInfoKHR-imageUsage-parameter# @imageUsage@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values ----- -   @imageUsage@ /must/ not be @0@+-- -   #VUID-VkSwapchainCreateInfoKHR-imageUsage-requiredbitmask#+--     @imageUsage@ /must/ not be @0@ ----- -   @imageSharingMode@ /must/ be a valid+-- -   #VUID-VkSwapchainCreateInfoKHR-imageSharingMode-parameter#+--     @imageSharingMode@ /must/ be a valid --     'Vulkan.Core10.Enums.SharingMode.SharingMode' value ----- -   @preTransform@ /must/ be a valid+-- -   #VUID-VkSwapchainCreateInfoKHR-preTransform-parameter#+--     @preTransform@ /must/ be a valid --     'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value ----- -   @compositeAlpha@ /must/ be a valid+-- -   #VUID-VkSwapchainCreateInfoKHR-compositeAlpha-parameter#+--     @compositeAlpha@ /must/ be a valid --     'Vulkan.Extensions.VK_KHR_surface.CompositeAlphaFlagBitsKHR' value ----- -   @presentMode@ /must/ be a valid---     'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR' value+-- -   #VUID-VkSwapchainCreateInfoKHR-presentMode-parameter# @presentMode@+--     /must/ be a valid 'Vulkan.Extensions.VK_KHR_surface.PresentModeKHR'+--     value ----- -   If @oldSwapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-VkSwapchainCreateInfoKHR-oldSwapchain-parameter# If+--     @oldSwapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @oldSwapchain@ /must/ be a valid --     'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   If @oldSwapchain@ is a valid handle, it /must/ have been created,+-- -   #VUID-VkSwapchainCreateInfoKHR-oldSwapchain-parent# If+--     @oldSwapchain@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @surface@ ----- -   Both of @oldSwapchain@, and @surface@ that are valid handles of---     non-ignored parameters /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Instance'+-- -   #VUID-VkSwapchainCreateInfoKHR-commonparent# Both of @oldSwapchain@,+--     and @surface@ that are valid handles of non-ignored parameters+--     /must/ have been created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Instance' -- -- = See Also --@@ -1704,10 +1769,11 @@ -- -- == Valid Usage ----- -   Each element of @pImageIndices@ /must/ be the index of a presentable---     image acquired from the swapchain specified by the corresponding---     element of the @pSwapchains@ array, and the presented image---     subresource /must/ be in the+-- -   #VUID-VkPresentInfoKHR-pImageIndices-01430# Each element of+--     @pImageIndices@ /must/ be the index of a presentable image acquired+--     from the swapchain specified by the corresponding element of the+--     @pSwapchains@ array, and the presented image subresource /must/ be+--     in the --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_PRESENT_SRC_KHR' or --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHARED_PRESENT_KHR' --     layout at the time the operation is executed on a@@ -1715,40 +1781,45 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPresentInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PRESENT_INFO_KHR' ----- -   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 'DeviceGroupPresentInfoKHR',+-- -   #VUID-VkPresentInfoKHR-pNext-pNext# 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+--     'DeviceGroupPresentInfoKHR', --     'Vulkan.Extensions.VK_KHR_display_swapchain.DisplayPresentInfoKHR', --     'Vulkan.Extensions.VK_GGP_frame_token.PresentFrameTokenGGP', --     'Vulkan.Extensions.VK_KHR_incremental_present.PresentRegionsKHR', or --     'Vulkan.Extensions.VK_GOOGLE_display_timing.PresentTimesInfoGOOGLE' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkPresentInfoKHR-sType-unique# The @sType@ value of each+--     struct in the @pNext@ chain /must/ be unique ----- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a---     valid pointer to an array of @waitSemaphoreCount@ valid+-- -   #VUID-VkPresentInfoKHR-pWaitSemaphores-parameter# If+--     @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a valid+--     pointer to an array of @waitSemaphoreCount@ valid --     'Vulkan.Core10.Handles.Semaphore' handles ----- -   @pSwapchains@ /must/ be a valid pointer to an array of---     @swapchainCount@ valid 'Vulkan.Extensions.Handles.SwapchainKHR'---     handles------ -   @pImageIndices@ /must/ be a valid pointer to an array of---     @swapchainCount@ @uint32_t@ values+-- -   #VUID-VkPresentInfoKHR-pSwapchains-parameter# @pSwapchains@ /must/+--     be a valid pointer to an array of @swapchainCount@ valid+--     'Vulkan.Extensions.Handles.SwapchainKHR' handles ----- -   If @pResults@ is not @NULL@, @pResults@ /must/ be a valid pointer to---     an array of @swapchainCount@ 'Vulkan.Core10.Enums.Result.Result'+-- -   #VUID-VkPresentInfoKHR-pImageIndices-parameter# @pImageIndices@+--     /must/ be a valid pointer to an array of @swapchainCount@ @uint32_t@ --     values ----- -   @swapchainCount@ /must/ be greater than @0@+-- -   #VUID-VkPresentInfoKHR-pResults-parameter# If @pResults@ is not+--     @NULL@, @pResults@ /must/ be a valid pointer to an array of+--     @swapchainCount@ 'Vulkan.Core10.Enums.Result.Result' values ----- -   Both of the elements of @pSwapchains@, and the elements of---     @pWaitSemaphores@ that are valid handles of non-ignored parameters---     /must/ have been created, allocated, or retrieved from the same+-- -   #VUID-VkPresentInfoKHR-swapchainCount-arraylength# @swapchainCount@+--     /must/ be greater than @0@+--+-- -   #VUID-VkPresentInfoKHR-commonparent# Both of the elements of+--     @pSwapchains@, and the elements of @pWaitSemaphores@ that are valid+--     handles of non-ignored parameters /must/ have been created,+--     allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Instance' -- -- = See Also@@ -1948,17 +2019,19 @@ -- -- == Valid Usage ----- -   If @swapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the---     fields of 'Vulkan.Core10.Image.ImageCreateInfo' /must/ match the+-- -   #VUID-VkImageSwapchainCreateInfoKHR-swapchain-00995# If @swapchain@+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the fields of+--     'Vulkan.Core10.Image.ImageCreateInfo' /must/ match the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#swapchain-wsi-image-create-info implied image creation parameters> --     of the swapchain -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageSwapchainCreateInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR' ----- -   If @swapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-VkImageSwapchainCreateInfoKHR-swapchain-parameter# If+--     @swapchain@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @swapchain@ /must/ be a valid --     'Vulkan.Extensions.Handles.SwapchainKHR' handle --@@ -2022,14 +2095,17 @@ -- -- == Valid Usage ----- -   @imageIndex@ /must/ be less than the number of images in @swapchain@+-- -   #VUID-VkBindImageMemorySwapchainInfoKHR-imageIndex-01644#+--     @imageIndex@ /must/ be less than the number of images in @swapchain@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkBindImageMemorySwapchainInfoKHR-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR' ----- -   @swapchain@ /must/ be a valid+-- -   #VUID-VkBindImageMemorySwapchainInfoKHR-swapchain-parameter#+--     @swapchain@ /must/ be a valid --     'Vulkan.Extensions.Handles.SwapchainKHR' handle -- -- == Host Synchronization@@ -2111,49 +2187,58 @@ -- -- == Valid Usage ----- -   @swapchain@ /must/ not be in the retired state+-- -   #VUID-VkAcquireNextImageInfoKHR-swapchain-01675# @swapchain@ /must/+--     not be in the retired state ----- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it---     /must/ be unsignaled+-- -   #VUID-VkAcquireNextImageInfoKHR-semaphore-01288# If @semaphore@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ be unsignaled ----- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it---     /must/ not have any uncompleted signal or wait operations pending+-- -   #VUID-VkAcquireNextImageInfoKHR-semaphore-01781# If @semaphore@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ not have any+--     uncompleted signal or wait operations pending ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/---     be unsignaled and /must/ not be associated with any other queue---     command that has not yet completed execution on that queue+-- -   #VUID-VkAcquireNextImageInfoKHR-fence-01289# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' it /must/ be unsignaled and+--     /must/ not be associated with any other queue command that has not+--     yet completed execution on that queue ----- -   @semaphore@ and @fence@ /must/ not both be equal to+-- -   #VUID-VkAcquireNextImageInfoKHR-semaphore-01782# @semaphore@ and+--     @fence@ /must/ not both be equal to --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   @deviceMask@ /must/ be a valid device mask+-- -   #VUID-VkAcquireNextImageInfoKHR-deviceMask-01290# @deviceMask@+--     /must/ be a valid device mask ----- -   @deviceMask@ /must/ not be zero+-- -   #VUID-VkAcquireNextImageInfoKHR-deviceMask-01291# @deviceMask@+--     /must/ not be zero ----- -   @semaphore@ /must/ have a---     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of+-- -   #VUID-VkAcquireNextImageInfoKHR-semaphore-03266# @semaphore@ /must/+--     have a 'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of --     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkAcquireNextImageInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkAcquireNextImageInfoKHR-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @swapchain@ /must/ be a valid---     'Vulkan.Extensions.Handles.SwapchainKHR' handle+-- -   #VUID-VkAcquireNextImageInfoKHR-swapchain-parameter# @swapchain@+--     /must/ be a valid 'Vulkan.Extensions.Handles.SwapchainKHR' handle ----- -   If @semaphore@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @semaphore@ /must/ be a valid 'Vulkan.Core10.Handles.Semaphore'---     handle+-- -   #VUID-VkAcquireNextImageInfoKHR-semaphore-parameter# If @semaphore@+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @semaphore@ /must/+--     be a valid 'Vulkan.Core10.Handles.Semaphore' handle ----- -   If @fence@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@---     /must/ be a valid 'Vulkan.Core10.Handles.Fence' handle+-- -   #VUID-VkAcquireNextImageInfoKHR-fence-parameter# If @fence@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @fence@ /must/ be a valid+--     'Vulkan.Core10.Handles.Fence' handle ----- -   Each of @fence@, @semaphore@, and @swapchain@ that are valid handles---     of non-ignored parameters /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Instance'+-- -   #VUID-VkAcquireNextImageInfoKHR-commonparent# Each of @fence@,+--     @semaphore@, and @swapchain@ that are valid handles of non-ignored+--     parameters /must/ have been created, allocated, or retrieved from+--     the same 'Vulkan.Core10.Handles.Instance' -- -- == Host Synchronization --@@ -2274,47 +2359,55 @@ -- -- == Valid Usage ----- -   @swapchainCount@ /must/ equal @0@ or+-- -   #VUID-VkDeviceGroupPresentInfoKHR-swapchainCount-01297#+--     @swapchainCount@ /must/ equal @0@ or --     'PresentInfoKHR'::@swapchainCount@ ----- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR', then each---     element of @pDeviceMasks@ /must/ have exactly one bit set, and the+-- -   #VUID-VkDeviceGroupPresentInfoKHR-mode-01298# If @mode@ is+--     'DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR', then each element of+--     @pDeviceMasks@ /must/ have exactly one bit set, and the --     corresponding element of --     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ /must/ be --     non-zero ----- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR', then each---     element of @pDeviceMasks@ /must/ have exactly one bit set, and some---     physical device in the logical device /must/ include that bit in its+-- -   #VUID-VkDeviceGroupPresentInfoKHR-mode-01299# If @mode@ is+--     'DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR', then each element of+--     @pDeviceMasks@ /must/ have exactly one bit set, and some physical+--     device in the logical device /must/ include that bit in its --     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ ----- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR', then each---     element of @pDeviceMasks@ /must/ have a value for which all set bits---     are set in one of the elements of+-- -   #VUID-VkDeviceGroupPresentInfoKHR-mode-01300# If @mode@ is+--     'DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR', then each element of+--     @pDeviceMasks@ /must/ have a value for which all set bits are set in+--     one of the elements of --     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ ----- -   If @mode@ is 'DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR',---     then for each bit set in each element of @pDeviceMasks@, the---     corresponding element of---     'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ /must/ be---     non-zero+-- -   #VUID-VkDeviceGroupPresentInfoKHR-mode-01301# If @mode@ is+--     'DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR', then for+--     each bit set in each element of @pDeviceMasks@, the corresponding+--     element of 'DeviceGroupPresentCapabilitiesKHR'::@presentMask@ /must/+--     be non-zero ----- -   The value of each element of @pDeviceMasks@ /must/ be equal to the---     device mask passed in 'AcquireNextImageInfoKHR'::@deviceMask@ when---     the image index was last acquired+-- -   #VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-01302# The value of+--     each element of @pDeviceMasks@ /must/ be equal to the device mask+--     passed in 'AcquireNextImageInfoKHR'::@deviceMask@ when the image+--     index was last acquired ----- -   @mode@ /must/ have exactly one bit set, and that bit /must/ have---     been included in 'DeviceGroupSwapchainCreateInfoKHR'::@modes@+-- -   #VUID-VkDeviceGroupPresentInfoKHR-mode-01303# @mode@ /must/ have+--     exactly one bit set, and that bit /must/ have been included in+--     'DeviceGroupSwapchainCreateInfoKHR'::@modes@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDeviceGroupPresentInfoKHR-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR' ----- -   If @swapchainCount@ is not @0@, @pDeviceMasks@ /must/ be a valid+-- -   #VUID-VkDeviceGroupPresentInfoKHR-pDeviceMasks-parameter# If+--     @swapchainCount@ is not @0@, @pDeviceMasks@ /must/ be a valid --     pointer to an array of @swapchainCount@ @uint32_t@ values ----- -   @mode@ /must/ be a valid 'DeviceGroupPresentModeFlagBitsKHR' value+-- -   #VUID-VkDeviceGroupPresentInfoKHR-mode-parameter# @mode@ /must/ be a+--     valid 'DeviceGroupPresentModeFlagBitsKHR' value -- -- = See Also --@@ -2388,10 +2481,12 @@ data DeviceGroupSwapchainCreateInfoKHR = DeviceGroupSwapchainCreateInfoKHR   { -- | @modes@ is a bitfield of modes that the swapchain /can/ be used with.     ---    -- @modes@ /must/ be a valid combination of-    -- 'DeviceGroupPresentModeFlagBitsKHR' values+    -- #VUID-VkDeviceGroupSwapchainCreateInfoKHR-modes-parameter# @modes@+    -- /must/ be a valid combination of 'DeviceGroupPresentModeFlagBitsKHR'+    -- values     ---    -- @modes@ /must/ not be @0@+    -- #VUID-VkDeviceGroupSwapchainCreateInfoKHR-modes-requiredbitmask# @modes@+    -- /must/ not be @0@     modes :: DeviceGroupPresentModeFlagsKHR }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_KHR_wayland_surface.hs view
@@ -93,16 +93,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateWaylandSurfaceKHR-instance-parameter# @instance@+--     /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'WaylandSurfaceCreateInfoKHR' structure+-- -   #VUID-vkCreateWaylandSurfaceKHR-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'WaylandSurfaceCreateInfoKHR'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateWaylandSurfaceKHR-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pSurface@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateWaylandSurfaceKHR-pSurface-parameter# @pSurface@+--     /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes@@ -174,11 +178,13 @@                                                 . (MonadIO io)                                                => -- | @physicalDevice@ is the physical device.                                                   --+                                                  -- #VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-physicalDevice-parameter#                                                   -- @physicalDevice@ /must/ be a valid                                                   -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                                   PhysicalDevice                                                -> -- | @queueFamilyIndex@ is the queue family index.                                                   --+                                                  -- #VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-queueFamilyIndex-01306#                                                   -- @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@                                                   -- returned by                                                   -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'@@ -187,6 +193,7 @@                                                -> -- | @display@ is a pointer to the @wl_display@ associated with a Wayland                                                   -- compositor.                                                   --+                                                  -- #VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-display-parameter#                                                   -- @display@ /must/ be a valid pointer to a @wl_display@ value                                                   (Ptr Wl_display)                                                -> io (Bool)@@ -211,14 +218,17 @@ data WaylandSurfaceCreateInfoKHR = WaylandSurfaceCreateInfoKHR   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkWaylandSurfaceCreateInfoKHR-flags-zerobitmask# @flags@ /must/ be+    -- @0@     flags :: WaylandSurfaceCreateFlagsKHR   , -- | @display@ and @surface@ are pointers to the Wayland @wl_display@ and     -- @wl_surface@ to associate the surface with.     ---    -- @display@ /must/ point to a valid Wayland @wl_display@+    -- #VUID-VkWaylandSurfaceCreateInfoKHR-display-01304# @display@ /must/+    -- point to a valid Wayland @wl_display@     display :: Ptr Wl_display-  , -- | @surface@ /must/ point to a valid Wayland @wl_surface@+  , -- | #VUID-VkWaylandSurfaceCreateInfoKHR-surface-01305# @surface@ /must/+    -- point to a valid Wayland @wl_surface@     surface :: Ptr Wl_surface   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs view
@@ -43,7 +43,8 @@ -- -- == Valid Usage ----- -   Each member of @pAcquireSyncs@ and @pReleaseSyncs@ /must/ be a+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-00081#+--     Each member of @pAcquireSyncs@ and @pReleaseSyncs@ /must/ be a --     device memory object imported by setting --     'Vulkan.Extensions.VK_KHR_external_memory_win32.ImportMemoryWin32HandleInfoKHR'::@handleType@ --     to@@ -53,29 +54,36 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR' ----- -   If @acquireCount@ is not @0@, @pAcquireSyncs@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireSyncs-parameter#+--     If @acquireCount@ is not @0@, @pAcquireSyncs@ /must/ be a valid --     pointer to an array of @acquireCount@ valid --     'Vulkan.Core10.Handles.DeviceMemory' handles ----- -   If @acquireCount@ is not @0@, @pAcquireKeys@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireKeys-parameter#+--     If @acquireCount@ is not @0@, @pAcquireKeys@ /must/ be a valid --     pointer to an array of @acquireCount@ @uint64_t@ values ----- -   If @acquireCount@ is not @0@, @pAcquireTimeouts@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pAcquireTimeouts-parameter#+--     If @acquireCount@ is not @0@, @pAcquireTimeouts@ /must/ be a valid --     pointer to an array of @acquireCount@ @uint32_t@ values ----- -   If @releaseCount@ is not @0@, @pReleaseSyncs@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pReleaseSyncs-parameter#+--     If @releaseCount@ is not @0@, @pReleaseSyncs@ /must/ be a valid --     pointer to an array of @releaseCount@ valid --     'Vulkan.Core10.Handles.DeviceMemory' handles ----- -   If @releaseCount@ is not @0@, @pReleaseKeys@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-pReleaseKeys-parameter#+--     If @releaseCount@ is not @0@, @pReleaseKeys@ /must/ be a valid --     pointer to an array of @releaseCount@ @uint64_t@ values ----- -   Both of the elements of @pAcquireSyncs@, and the elements of---     @pReleaseSyncs@ that are valid handles of non-ignored parameters---     /must/ have been created, allocated, or retrieved from the same+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoKHR-commonparent# Both of+--     the elements of @pAcquireSyncs@, and the elements of @pReleaseSyncs@+--     that are valid handles of non-ignored parameters /must/ have been+--     created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' -- -- = See Also
src/Vulkan/Extensions/VK_KHR_win32_surface.hs view
@@ -93,17 +93,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateWin32SurfaceKHR-instance-parameter# @instance@ /must/+--     be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'Win32SurfaceCreateInfoKHR' structure+-- -   #VUID-vkCreateWin32SurfaceKHR-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'Win32SurfaceCreateInfoKHR'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateWin32SurfaceKHR-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSurface@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.SurfaceKHR' handle+-- -   #VUID-vkCreateWin32SurfaceKHR-pSurface-parameter# @pSurface@ /must/+--     be a valid pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'+--     handle -- -- == Return Codes --@@ -174,11 +177,13 @@                                               . (MonadIO io)                                              => -- | @physicalDevice@ is the physical device.                                                 --+                                                -- #VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-physicalDevice-parameter#                                                 -- @physicalDevice@ /must/ be a valid                                                 -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                                 PhysicalDevice                                              -> -- | @queueFamilyIndex@ is the queue family index.                                                 --+                                                -- #VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-queueFamilyIndex-01309#                                                 -- @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@                                                 -- returned by                                                 -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'@@ -206,16 +211,19 @@ data Win32SurfaceCreateInfoKHR = Win32SurfaceCreateInfoKHR   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkWin32SurfaceCreateInfoKHR-flags-zerobitmask# @flags@ /must/ be+    -- @0@     flags :: Win32SurfaceCreateFlagsKHR   , -- | @hinstance@ is the Win32 'HINSTANCE' for the window to associate the     -- surface with.     ---    -- @hinstance@ /must/ be a valid Win32 'HINSTANCE'+    -- #VUID-VkWin32SurfaceCreateInfoKHR-hinstance-01307# @hinstance@ /must/ be+    -- a valid Win32 'HINSTANCE'     hinstance :: HINSTANCE   , -- | @hwnd@ is the Win32 'HWND' for the window to associate the surface with.     ---    -- @hwnd@ /must/ be a valid Win32 'HWND'+    -- #VUID-VkWin32SurfaceCreateInfoKHR-hwnd-01308# @hwnd@ /must/ be a valid+    -- Win32 'HWND'     hwnd :: HWND   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_KHR_xcb_surface.hs view
@@ -94,17 +94,19 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateXcbSurfaceKHR-instance-parameter# @instance@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'XcbSurfaceCreateInfoKHR' structure+-- -   #VUID-vkCreateXcbSurfaceKHR-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'XcbSurfaceCreateInfoKHR'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateXcbSurfaceKHR-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSurface@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.SurfaceKHR' handle+-- -   #VUID-vkCreateXcbSurfaceKHR-pSurface-parameter# @pSurface@ /must/ be+--     a valid pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes --@@ -175,11 +177,13 @@                                             . (MonadIO io)                                            => -- | @physicalDevice@ is the physical device.                                               --+                                              -- #VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-physicalDevice-parameter#                                               -- @physicalDevice@ /must/ be a valid                                               -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                               PhysicalDevice                                            -> -- | @queueFamilyIndex@ is the queue family index.                                               --+                                              -- #VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-queueFamilyIndex-01312#                                               -- @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@                                               -- returned by                                               -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'@@ -187,6 +191,7 @@                                               ("queueFamilyIndex" ::: Word32)                                            -> -- | @connection@ is a pointer to an @xcb_connection_t@ to the X server.                                               --+                                              -- #VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-connection-parameter#                                               -- @connection@ /must/ be a valid pointer to an @xcb_connection_t@ value                                               (Ptr Xcb_connection_t)                                            -> -- | @visual_id@ is an X11 visual (@xcb_visualid_t@).@@ -213,16 +218,18 @@ data XcbSurfaceCreateInfoKHR = XcbSurfaceCreateInfoKHR   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkXcbSurfaceCreateInfoKHR-flags-zerobitmask# @flags@ /must/ be @0@     flags :: XcbSurfaceCreateFlagsKHR   , -- | @connection@ is a pointer to an @xcb_connection_t@ to the X server.     ---    -- @connection@ /must/ point to a valid X11 @xcb_connection_t@+    -- #VUID-VkXcbSurfaceCreateInfoKHR-connection-01310# @connection@ /must/+    -- point to a valid X11 @xcb_connection_t@     connection :: Ptr Xcb_connection_t   , -- | @window@ is the @xcb_window_t@ for the X11 window to associate the     -- surface with.     ---    -- @window@ /must/ be a valid X11 @xcb_window_t@+    -- #VUID-VkXcbSurfaceCreateInfoKHR-window-01311# @window@ /must/ be a valid+    -- X11 @xcb_window_t@     window :: Xcb_window_t   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_KHR_xlib_surface.hs view
@@ -95,17 +95,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateXlibSurfaceKHR-instance-parameter# @instance@ /must/+--     be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'XlibSurfaceCreateInfoKHR' structure+-- -   #VUID-vkCreateXlibSurfaceKHR-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'XlibSurfaceCreateInfoKHR'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateXlibSurfaceKHR-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSurface@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.SurfaceKHR' handle+-- -   #VUID-vkCreateXlibSurfaceKHR-pSurface-parameter# @pSurface@ /must/+--     be a valid pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'+--     handle -- -- == Return Codes --@@ -176,11 +179,13 @@                                              . (MonadIO io)                                             => -- | @physicalDevice@ is the physical device.                                                --+                                               -- #VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-physicalDevice-parameter#                                                -- @physicalDevice@ /must/ be a valid                                                -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                                PhysicalDevice                                             -> -- | @queueFamilyIndex@ is the queue family index.                                                --+                                               -- #VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-queueFamilyIndex-01315#                                                -- @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@                                                -- returned by                                                -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'@@ -188,7 +193,8 @@                                                ("queueFamilyIndex" ::: Word32)                                             -> -- | @dpy@ is a pointer to an Xlib 'Display' connection to the server.                                                ---                                               -- @dpy@ /must/ be a valid pointer to a 'Display' value+                                               -- #VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-dpy-parameter# @dpy@+                                               -- /must/ be a valid pointer to a 'Display' value                                                ("dpy" ::: Ptr Display)                                             -> -- No documentation found for Nested "vkGetPhysicalDeviceXlibPresentationSupportKHR" "visualID"                                                VisualID@@ -214,15 +220,18 @@ data XlibSurfaceCreateInfoKHR = XlibSurfaceCreateInfoKHR   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkXlibSurfaceCreateInfoKHR-flags-zerobitmask# @flags@ /must/ be+    -- @0@     flags :: XlibSurfaceCreateFlagsKHR   , -- | @dpy@ is a pointer to an Xlib 'Display' connection to the X server.     ---    -- @dpy@ /must/ point to a valid Xlib 'Display'+    -- #VUID-VkXlibSurfaceCreateInfoKHR-dpy-01313# @dpy@ /must/ point to a+    -- valid Xlib 'Display'     dpy :: Ptr Display   , -- | @window@ is an Xlib 'Window' to associate the surface with.     ---    -- @window@ /must/ be a valid Xlib 'Window'+    -- #VUID-VkXlibSurfaceCreateInfoKHR-window-01314# @window@ /must/ be a+    -- valid Xlib 'Window'     window :: Window   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_MVK_ios_surface.hs view
@@ -105,17 +105,19 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateIOSSurfaceMVK-instance-parameter# @instance@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'IOSSurfaceCreateInfoMVK' structure+-- -   #VUID-vkCreateIOSSurfaceMVK-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'IOSSurfaceCreateInfoMVK'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateIOSSurfaceMVK-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSurface@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.SurfaceKHR' handle+-- -   #VUID-vkCreateIOSSurfaceMVK-pSurface-parameter# @pSurface@ /must/ be+--     a valid pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes --@@ -166,24 +168,27 @@ -- -- == Valid Usage ----- -   If @pView@ is a+-- -   #VUID-VkIOSSurfaceCreateInfoMVK-pView-04143# If @pView@ is a --     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer' object, it --     /must/ be a valid --     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer'. ----- -   If @pView@ is a @UIView@ object, it /must/ be a valid @UIView@,---     /must/ be backed by a @CALayer@ object of type+-- -   #VUID-VkIOSSurfaceCreateInfoMVK-pView-01316# If @pView@ is a+--     @UIView@ object, it /must/ be a valid @UIView@, /must/ be backed by+--     a @CALayer@ object of type --     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer', and --     'createIOSSurfaceMVK' /must/ be called on the main thread. -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkIOSSurfaceCreateInfoMVK-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkIOSSurfaceCreateInfoMVK-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkIOSSurfaceCreateInfoMVK-flags-zerobitmask# @flags@ /must/ be+--     @0@ -- -- = See Also --
src/Vulkan/Extensions/VK_MVK_macos_surface.hs view
@@ -107,17 +107,20 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateMacOSSurfaceMVK-instance-parameter# @instance@ /must/+--     be a valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'MacOSSurfaceCreateInfoMVK' structure+-- -   #VUID-vkCreateMacOSSurfaceMVK-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'MacOSSurfaceCreateInfoMVK'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateMacOSSurfaceMVK-pAllocator-parameter# If @pAllocator@+--     is not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSurface@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.SurfaceKHR' handle+-- -   #VUID-vkCreateMacOSSurfaceMVK-pSurface-parameter# @pSurface@ /must/+--     be a valid pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR'+--     handle -- -- == Return Codes --@@ -168,24 +171,27 @@ -- -- == Valid Usage ----- -   If @pView@ is a+-- -   #VUID-VkMacOSSurfaceCreateInfoMVK-pView-04144# If @pView@ is a --     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer' object, it --     /must/ be a valid --     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer'. ----- -   If @pView@ is an @NSView@ object, it /must/ be a valid @NSView@,---     /must/ be backed by a @CALayer@ object of type+-- -   #VUID-VkMacOSSurfaceCreateInfoMVK-pView-01317# If @pView@ is an+--     @NSView@ object, it /must/ be a valid @NSView@, /must/ be backed by+--     a @CALayer@ object of type --     'Vulkan.Extensions.VK_EXT_metal_surface.CAMetalLayer', and --     'createMacOSSurfaceMVK' /must/ be called on the main thread. -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkMacOSSurfaceCreateInfoMVK-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkMacOSSurfaceCreateInfoMVK-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkMacOSSurfaceCreateInfoMVK-flags-zerobitmask# @flags@ /must/+--     be @0@ -- -- = See Also --
src/Vulkan/Extensions/VK_NN_vi_surface.hs view
@@ -98,17 +98,19 @@ -- -- == Valid Usage (Implicit) ----- -   @instance@ /must/ be a valid 'Vulkan.Core10.Handles.Instance' handle+-- -   #VUID-vkCreateViSurfaceNN-instance-parameter# @instance@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Instance' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid---     'ViSurfaceCreateInfoNN' structure+-- -   #VUID-vkCreateViSurfaceNN-pCreateInfo-parameter# @pCreateInfo@+--     /must/ be a valid pointer to a valid 'ViSurfaceCreateInfoNN'+--     structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid+-- -   #VUID-vkCreateViSurfaceNN-pAllocator-parameter# If @pAllocator@ is+--     not @NULL@, @pAllocator@ /must/ be a valid pointer to a valid --     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure ----- -   @pSurface@ /must/ be a valid pointer to a---     'Vulkan.Extensions.Handles.SurfaceKHR' handle+-- -   #VUID-vkCreateViSurfaceNN-pSurface-parameter# @pSurface@ /must/ be a+--     valid pointer to a 'Vulkan.Extensions.Handles.SurfaceKHR' handle -- -- == Return Codes --@@ -169,12 +171,13 @@ data ViSurfaceCreateInfoNN = ViSurfaceCreateInfoNN   { -- | @flags@ is reserved for future use.     ---    -- @flags@ /must/ be @0@+    -- #VUID-VkViSurfaceCreateInfoNN-flags-zerobitmask# @flags@ /must/ be @0@     flags :: ViSurfaceCreateFlagsNN   , -- | @window@ is the @nn@::@vi@::@NativeWindowHandle@ for the     -- @nn@::@vi@::@Layer@ with which to associate the surface.     ---    -- @window@ /must/ be a valid @nn@::@vi@::@NativeWindowHandle@+    -- #VUID-VkViSurfaceCreateInfoNN-window-01318# @window@ /must/ be a valid+    -- @nn@::@vi@::@NativeWindowHandle@     window :: Ptr ()   }   deriving (Typeable)
src/Vulkan/Extensions/VK_NVX_image_view_handle.hs view
@@ -76,12 +76,13 @@                        . (MonadIO io)                       => -- | @device@ is the logical device that owns the image view.                          ---                         -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                         -- #VUID-vkGetImageViewHandleNVX-device-parameter# @device@ /must/ be a+                         -- valid 'Vulkan.Core10.Handles.Device' handle                          Device                       -> -- | @pInfo@ describes the image view to query and type of handle.                          ---                         -- @pInfo@ /must/ be a valid pointer to a valid 'ImageViewHandleInfoNVX'-                         -- structure+                         -- #VUID-vkGetImageViewHandleNVX-pInfo-parameter# @pInfo@ /must/ be a valid+                         -- pointer to a valid 'ImageViewHandleInfoNVX' structure                          ImageViewHandleInfoNVX                       -> io (Word32) getImageViewHandleNVX device info = liftIO . evalContT $ do@@ -123,14 +124,16 @@                         . (MonadIO io)                        => -- | @device@ is the logical device that owns the image view.                           ---                          -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                          -- #VUID-vkGetImageViewAddressNVX-device-parameter# @device@ /must/ be a+                          -- valid 'Vulkan.Core10.Handles.Device' handle                           Device                        -> -- | @imageView@ is a handle to the image view.                           ---                          -- @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView' handle+                          -- #VUID-vkGetImageViewAddressNVX-imageView-parameter# @imageView@ /must/+                          -- be a valid 'Vulkan.Core10.Handles.ImageView' handle                           ---                          -- @imageView@ /must/ have been created, allocated, or retrieved from-                          -- @device@+                          -- #VUID-vkGetImageViewAddressNVX-imageView-parent# @imageView@ /must/ have+                          -- been created, allocated, or retrieved from @device@                           ImageView                        -> io (ImageViewAddressPropertiesNVX) getImageViewAddressNVX device imageView = liftIO . evalContT $ do@@ -150,17 +153,18 @@ -- -- == Valid Usage ----- -   @descriptorType@ /must/ be+-- -   #VUID-VkImageViewHandleInfoNVX-descriptorType-02654#+--     @descriptorType@ /must/ be --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER' ----- -   @sampler@ /must/ be a valid 'Vulkan.Core10.Handles.Sampler' if---     @descriptorType@ is+-- -   #VUID-VkImageViewHandleInfoNVX-sampler-02655# @sampler@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Sampler' if @descriptorType@ is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER' ----- -   If descriptorType is+-- -   #VUID-VkImageViewHandleInfoNVX-imageView-02656# If descriptorType is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE' --     or --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER',@@ -169,7 +173,7 @@ --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SAMPLED_BIT' --     usage bit set ----- -   If descriptorType is+-- -   #VUID-VkImageViewHandleInfoNVX-imageView-02657# If descriptorType is --     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', --     the image that @imageView@ was created from /must/ have been created --     with the@@ -178,23 +182,26 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkImageViewHandleInfoNVX-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkImageViewHandleInfoNVX-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView'---     handle+-- -   #VUID-VkImageViewHandleInfoNVX-imageView-parameter# @imageView@+--     /must/ be a valid 'Vulkan.Core10.Handles.ImageView' handle ----- -   @descriptorType@ /must/ be a valid+-- -   #VUID-VkImageViewHandleInfoNVX-descriptorType-parameter#+--     @descriptorType@ /must/ be a valid --     'Vulkan.Core10.Enums.DescriptorType.DescriptorType' value ----- -   If @sampler@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @sampler@ /must/ be a valid 'Vulkan.Core10.Handles.Sampler' handle+-- -   #VUID-VkImageViewHandleInfoNVX-sampler-parameter# If @sampler@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @sampler@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Sampler' handle ----- -   Both of @imageView@, and @sampler@ that are valid handles of---     non-ignored parameters /must/ have been created, allocated, or---     retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkImageViewHandleInfoNVX-commonparent# Both of @imageView@,+--     and @sampler@ that are valid handles of non-ignored parameters+--     /must/ have been created, allocated, or retrieved from the same+--     'Vulkan.Core10.Handles.Device' -- -- = See Also --
src/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs view
@@ -51,9 +51,10 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX-  { -- | @perViewPositionAllComponents@ is 'Vulkan.Core10.FundamentalTypes.TRUE'-    -- if the implementation supports per-view position values that differ in-    -- components other than the X component.+  { -- | #limits-perViewPositionAllComponents# @perViewPositionAllComponents@ is+    -- 'Vulkan.Core10.FundamentalTypes.TRUE' if the implementation supports+    -- per-view position values that differ in components other than the X+    -- component.     perViewPositionAllComponents :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs view
@@ -73,29 +73,31 @@ -- -- == Valid Usage ----- -   @firstViewport@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@------ -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@---     and+-- -   #VUID-vkCmdSetViewportWScalingNV-firstViewport-01324# The sum of+--     @firstViewport@ and @viewportCount@ /must/ be between @1@ and --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@, --     inclusive -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetViewportWScalingNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pViewportWScalings@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCmdSetViewportWScalingNV-pViewportWScalings-parameter#+--     @pViewportWScalings@ /must/ be a valid pointer to an array of --     @viewportCount@ 'ViewportWScalingNV' structures ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetViewportWScalingNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetViewportWScalingNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   @viewportCount@ /must/ be greater than @0@+-- -   #VUID-vkCmdSetViewportWScalingNV-viewportCount-arraylength#+--     @viewportCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -208,6 +210,7 @@     -- /must/ match the number of viewports in the pipeline if viewport __W__     -- scaling is enabled.     --+    -- #VUID-VkPipelineViewportWScalingStateCreateInfoNV-viewportCount-arraylength#     -- @viewportCount@ /must/ be greater than @0@     viewportCount :: Word32   , -- | @pViewportWScalings@ is a pointer to an array of 'ViewportWScalingNV'
src/Vulkan/Extensions/VK_NV_compute_shader_derivatives.hs view
@@ -58,11 +58,13 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceComputeShaderDerivativesFeaturesNV = PhysicalDeviceComputeShaderDerivativesFeaturesNV-  { -- | @computeDerivativeGroupQuads@ indicates that the implementation supports-    -- the @ComputeDerivativeGroupQuadsNV@ SPIR-V capability.+  { -- | #features-computeDerivativeGroupQuads# @computeDerivativeGroupQuads@+    -- indicates that the implementation supports the+    -- @ComputeDerivativeGroupQuadsNV@ SPIR-V capability.     computeDerivativeGroupQuads :: Bool-  , -- | @computeDerivativeGroupLinear@ indicates that the implementation-    -- supports the @ComputeDerivativeGroupLinearNV@ SPIR-V capability.+  , -- | #features-computeDerivativeGroupLinear# @computeDerivativeGroupLinear@+    -- indicates that the implementation supports the+    -- @ComputeDerivativeGroupLinearNV@ SPIR-V capability.     computeDerivativeGroupLinear :: Bool   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_NV_cooperative_matrix.hs view
@@ -121,12 +121,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-pPropertyCount-parameter#+--     @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pPropertyCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceCooperativeMatrixPropertiesNV-pProperties-parameter#+--     If the value referenced by @pPropertyCount@ is not @0@, and --     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer --     to an array of @pPropertyCount@ 'CooperativeMatrixPropertiesNV' --     structures@@ -197,10 +200,11 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceCooperativeMatrixFeaturesNV = PhysicalDeviceCooperativeMatrixFeaturesNV-  { -- | @cooperativeMatrix@ indicates that the implementation supports the-    -- @CooperativeMatrixNV@ SPIR-V capability.+  { -- | #features-cooperativeMatrix# @cooperativeMatrix@ indicates that the+    -- implementation supports the @CooperativeMatrixNV@ SPIR-V capability.     cooperativeMatrix :: Bool-  , -- | @cooperativeMatrixRobustBufferAccess@ indicates that the implementation+  , -- | #features-cooperativeMatrixRobustBufferAccess#+    -- @cooperativeMatrixRobustBufferAccess@ indicates that the implementation     -- supports robust buffer access for SPIR-V @OpCooperativeMatrixLoadNV@ and     -- @OpCooperativeMatrixStoreNV@ instructions.     cooperativeMatrixRobustBufferAccess :: Bool@@ -269,7 +273,8 @@ -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceCooperativeMatrixPropertiesNV = PhysicalDeviceCooperativeMatrixPropertiesNV-  { -- | @cooperativeMatrixSupportedStages@ is a bitfield of+  { -- | #limits-cooperativeMatrixSupportedStages#+    -- @cooperativeMatrixSupportedStages@ is a bitfield of     -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' describing     -- the shader stages that cooperative matrix instructions are supported in.     -- @cooperativeMatrixSupportedStages@ will have the@@ -343,23 +348,28 @@     kSize :: Word32   , -- | @AType@ is the component type of matrix A, of type 'ComponentTypeNV'.     ---    -- @AType@ /must/ be a valid 'ComponentTypeNV' value+    -- #VUID-VkCooperativeMatrixPropertiesNV-AType-parameter# @AType@ /must/ be+    -- a valid 'ComponentTypeNV' value     aType :: ComponentTypeNV   , -- | @BType@ is the component type of matrix B, of type 'ComponentTypeNV'.     ---    -- @BType@ /must/ be a valid 'ComponentTypeNV' value+    -- #VUID-VkCooperativeMatrixPropertiesNV-BType-parameter# @BType@ /must/ be+    -- a valid 'ComponentTypeNV' value     bType :: ComponentTypeNV   , -- | @CType@ is the component type of matrix C, of type 'ComponentTypeNV'.     ---    -- @CType@ /must/ be a valid 'ComponentTypeNV' value+    -- #VUID-VkCooperativeMatrixPropertiesNV-CType-parameter# @CType@ /must/ be+    -- a valid 'ComponentTypeNV' value     cType :: ComponentTypeNV   , -- | @DType@ is the component type of matrix D, of type 'ComponentTypeNV'.     ---    -- @DType@ /must/ be a valid 'ComponentTypeNV' value+    -- #VUID-VkCooperativeMatrixPropertiesNV-DType-parameter# @DType@ /must/ be+    -- a valid 'ComponentTypeNV' value     dType :: ComponentTypeNV   , -- | @scope@ is the scope of all the matrix types, of type 'ScopeNV'.     ---    -- @scope@ /must/ be a valid 'ScopeNV' value+    -- #VUID-VkCooperativeMatrixPropertiesNV-scope-parameter# @scope@ /must/ be+    -- a valid 'ScopeNV' value     scope :: ScopeNV   }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_NV_corner_sampled_image.hs view
@@ -53,7 +53,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceCornerSampledImageFeaturesNV = PhysicalDeviceCornerSampledImageFeaturesNV-  { -- | @cornerSampledImage@ specifies whether images can be created with a+  { -- | #features-cornersampledimage# @cornerSampledImage@ specifies whether+    -- images can be created with a     -- 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing     -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'.     -- See
src/Vulkan/Extensions/VK_NV_coverage_reduction_mode.hs view
@@ -110,12 +110,15 @@ -- -- == Valid Usage (Implicit) ----- -   @physicalDevice@ /must/ be a valid+-- -   #VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-physicalDevice-parameter#+--     @physicalDevice@ /must/ be a valid --     'Vulkan.Core10.Handles.PhysicalDevice' handle ----- -   @pCombinationCount@ /must/ be a valid pointer to a @uint32_t@ value+-- -   #VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-pCombinationCount-parameter#+--     @pCombinationCount@ /must/ be a valid pointer to a @uint32_t@ value ----- -   If the value referenced by @pCombinationCount@ is not @0@, and+-- -   #VUID-vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV-pCombinations-parameter#+--     If the value referenced by @pCombinationCount@ is not @0@, and --     @pCombinations@ is not @NULL@, @pCombinations@ /must/ be a valid --     pointer to an array of @pCombinationCount@ --     'FramebufferMixedSamplesCombinationNV' structures@@ -189,8 +192,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceCoverageReductionModeFeaturesNV = PhysicalDeviceCoverageReductionModeFeaturesNV-  { -- | @coverageReductionMode@ indicates whether the implementation supports-    -- coverage reduction modes. See+  { -- | #features-coverageReductionMode# @coverageReductionMode@ indicates+    -- whether the implementation supports coverage reduction modes. See     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-coverage-reduction Coverage Reduction>.     coverageReductionMode :: Bool }   deriving (Typeable, Eq)@@ -253,12 +256,15 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineCoverageReductionStateCreateInfoNV-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV' ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkPipelineCoverageReductionStateCreateInfoNV-flags-zerobitmask#+--     @flags@ /must/ be @0@ ----- -   @coverageReductionMode@ /must/ be a valid 'CoverageReductionModeNV'+-- -   #VUID-VkPipelineCoverageReductionStateCreateInfoNV-coverageReductionMode-parameter#+--     @coverageReductionMode@ /must/ be a valid 'CoverageReductionModeNV' --     value -- -- = See Also
src/Vulkan/Extensions/VK_NV_dedicated_allocation.hs view
@@ -46,7 +46,8 @@ -- -- == Valid Usage ----- -   If @dedicatedAllocation@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+-- -   #VUID-VkDedicatedAllocationImageCreateInfoNV-dedicatedAllocation-00994#+--     If @dedicatedAllocation@ is 'Vulkan.Core10.FundamentalTypes.TRUE', --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ /must/ not include --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_BINDING_BIT', --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT',@@ -55,7 +56,8 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDedicatedAllocationImageCreateInfoNV-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV' -- -- = See Also@@ -160,38 +162,45 @@ -- -- == Valid Usage ----- -   At least one of @image@ and @buffer@ /must/ be+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00649# At+--     least one of @image@ and @buffer@ /must/ be --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the---     image /must/ have been created with+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00650# If+--     @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the image+--     /must/ have been created with --     'DedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@ equal --     to 'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the---     buffer /must/ have been created with+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00651# If+--     @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the buffer+--     /must/ have been created with --     'DedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@ equal --     to 'Vulkan.Core10.FundamentalTypes.TRUE' ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00652# If+--     @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     'Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@ /must/ --     equal the --     'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ of the --     image ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00653# If+--     @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     'Vulkan.Core10.Memory.MemoryAllocateInfo'::@allocationSize@ /must/ --     equal the --     'Vulkan.Core10.MemoryManagement.MemoryRequirements'::@size@ of the --     buffer ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00654# If+--     @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and --     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import --     operation, the memory being imported /must/ also be a dedicated --     image allocation and @image@ /must/ be identical to the image --     associated with the imported memory ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00655# If+--     @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE' and --     'Vulkan.Core10.Memory.MemoryAllocateInfo' defines a memory import --     operation, the memory being imported /must/ also be a dedicated --     buffer allocation and @buffer@ /must/ be identical to the buffer@@ -199,16 +208,20 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV' ----- -   If @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-parameter# If+--     @image@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @image@ --     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle ----- -   If @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-parameter# If+--     @buffer@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @buffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   Both of @buffer@, and @image@ that are valid handles of non-ignored+-- -   #VUID-VkDedicatedAllocationMemoryAllocateInfoNV-commonparent# Both+--     of @buffer@, and @image@ that are valid handles of non-ignored --     parameters /must/ have been created, allocated, or retrieved from --     the same 'Vulkan.Core10.Handles.Device' --
src/Vulkan/Extensions/VK_NV_dedicated_allocation_image_aliasing.hs view
@@ -55,7 +55,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV-  { -- | @dedicatedAllocationImageAliasing@ indicates that the implementation+  { -- | #features-dedicatedAllocationImageAliasing#+    -- @dedicatedAllocationImageAliasing@ indicates that the implementation     -- supports aliasing of compatible image objects on a dedicated allocation.     dedicatedAllocationImageAliasing :: Bool }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_NV_device_diagnostic_checkpoints.hs view
@@ -69,13 +69,15 @@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdSetCheckpointNV-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetCheckpointNV-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetCheckpointNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, compute, or transfer --     operations --@@ -142,16 +144,20 @@ -- -- == Valid Usage ----- -   The device that @queue@ belongs to /must/ be in the lost state+-- -   #VUID-vkGetQueueCheckpointDataNV-queue-02025# The device that+--     @queue@ belongs to /must/ be in the lost state -- -- == Valid Usage (Implicit) ----- -   @queue@ /must/ be a valid 'Vulkan.Core10.Handles.Queue' handle+-- -   #VUID-vkGetQueueCheckpointDataNV-queue-parameter# @queue@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Queue' handle ----- -   @pCheckpointDataCount@ /must/ be a valid pointer to a @uint32_t@+-- -   #VUID-vkGetQueueCheckpointDataNV-pCheckpointDataCount-parameter#+--     @pCheckpointDataCount@ /must/ be a valid pointer to a @uint32_t@ --     value ----- -   If the value referenced by @pCheckpointDataCount@ is not @0@, and+-- -   #VUID-vkGetQueueCheckpointDataNV-pCheckpointData-parameter# If the+--     value referenced by @pCheckpointDataCount@ is not @0@, and --     @pCheckpointData@ is not @NULL@, @pCheckpointData@ /must/ be a valid --     pointer to an array of @pCheckpointDataCount@ 'CheckpointDataNV' --     structures
src/Vulkan/Extensions/VK_NV_device_diagnostics_config.hs view
@@ -76,8 +76,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDiagnosticsConfigFeaturesNV = PhysicalDeviceDiagnosticsConfigFeaturesNV-  { -- | @diagnosticsConfig@ indicates whether the implementation supports the-    -- ability to configure diagnostic tools.+  { -- | #features-features-diagnosticsConfig# @diagnosticsConfig@ indicates+    -- whether the implementation supports the ability to configure diagnostic+    -- tools.     diagnosticsConfig :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -130,8 +131,9 @@   { -- | @flags@ is a bitmask of 'DeviceDiagnosticsConfigFlagBitsNV' specifying     -- addtional parameters for configuring diagnostic tools.     ---    -- @flags@ /must/ be a valid combination of-    -- 'DeviceDiagnosticsConfigFlagBitsNV' values+    -- #VUID-VkDeviceDiagnosticsConfigCreateInfoNV-flags-parameter# @flags@+    -- /must/ be a valid combination of 'DeviceDiagnosticsConfigFlagBitsNV'+    -- values     flags :: DeviceDiagnosticsConfigFlagsNV }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_NV_device_generated_commands.hs view
@@ -170,7 +170,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -179,20 +180,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -201,7 +205,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -215,23 +220,25 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02697# For each set /n/+--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'+--     bound to the pipeline bind point used by this command, a descriptor+--     set /must/ have been bound to /n/ at the same pipeline bind point,+--     with a 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for+--     set /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02698# For each push+--     constant that is statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command, a push constant value /must/ have been set for --     the same pipeline bind point, with a@@ -240,28 +247,32 @@ --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02699# Descriptors in+--     each bound descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02700# A valid pipeline+--     /must/ be bound to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02859# There /must/ not+--     have been any calls to dynamic state setting commands for any state+--     not specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command, since+--     that pipeline was bound+--+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -273,21 +284,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -295,7 +308,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -303,46 +316,54 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02707# If+--     @commandBuffer@ is an unprotected command buffer, any resource --     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the --     pipeline bind point used by this command /must/ not be a protected --     resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-sparseImageInt64Atomics-04474#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -351,7 +372,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-sparseImageInt64Atomics-04475#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -360,7 +382,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   The current render pass /must/ be+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-renderPass-02684# The current+--     render pass /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible> --     with the @renderPass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure@@ -368,25 +391,32 @@ --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-subpass-02685# The subpass+--     index of the current render pass /must/ be equal to the @subpass@+--     member of the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'+--     structure specified when creating the+--     'Vulkan.Core10.Handles.Pipeline' bound to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02686# Every input+--     attachment used by the current subpass /must/ be bound to the+--     pipeline via a descriptor set ----- -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04584# Image subresources+--     used as attachments in the current render pass /must/ not be+--     accessed in any way other than as an attachment by this command,+--     except for cases involving read-only access to depth\/stencil+--     attachments as described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter ----- -   If the draw is recorded in a render pass instance with multiview+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-maxMultiviewInstanceIndex-02688#+--     If the draw is recorded in a render pass instance with multiview --     enabled, the maximum instance index /must/ be less than or equal to --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@ ----- -   If the bound graphics pipeline was created with+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-02689#+--     If the bound graphics pipeline was created with --     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@ --     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass --     has a depth\/stencil attachment, then that attachment /must/ have@@ -394,7 +424,8 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' --     bit set ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03417# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'@@ -407,7 +438,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-scissorCount-03418# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -420,7 +452,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with both the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03419# If the+--     bound graphics pipeline state was created with both the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -434,7 +467,8 @@ --     /must/ match the @scissorCount@ parameter of --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-04137# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -445,7 +479,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-04138# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -456,7 +491,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-04139# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -467,7 +503,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-04140# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -478,7 +515,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-VkPipelineVieportCreateInfo-04141#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'@@ -489,7 +527,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-VkPipelineVieportCreateInfo-04142#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'@@ -500,7 +539,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-primitiveTopology-03420# If+--     the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT' --     dynamic state enabled then --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'@@ -513,7 +553,8 @@ --     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ --     state ----- -   If the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports> --     limit is not supported, the bound graphics pipeline was created with --     the@@ -527,25 +568,28 @@ --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' --     /must/ be @1@ ----- -   All vertex input bindings accessed via vertex input variables---     declared in the vertex shader entry point’s interface /must/ have---     either valid or 'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers---     bound+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04007# All vertex input+--     bindings accessed via vertex input variables declared in the vertex+--     shader entry point’s interface /must/ have either valid or+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound ----- -   If the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04008# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor> --     feature is not enabled, all vertex input bindings accessed via --     vertex input variables declared in the vertex shader entry point’s --     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   For a given vertex buffer binding, any attribute data fetched /must/---     be entirely contained within the corresponding vertex buffer---     binding, as described in+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02721# For a given vertex+--     buffer binding, any attribute data fetched /must/ be entirely+--     contained within the corresponding vertex buffer binding, as+--     described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???> ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02970#+--     @commandBuffer@ /must/ not be a protected command buffer ----- -   If @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' then+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-isPreprocessed-02908# If+--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' then --     'cmdPreprocessGeneratedCommandsNV' /must/ have already been executed --     on the device, using the same @pGeneratedCommandsInfo@ content as --     well as the content of the input buffers it references (all except@@ -554,30 +598,38 @@ --     been created with the --     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' bit set ----- -   'GeneratedCommandsInfoNV'::@pipeline@ /must/ match the current bound+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-pipeline-02909#+--     'GeneratedCommandsInfoNV'::@pipeline@ /must/ match the current bound --     pipeline at 'GeneratedCommandsInfoNV'::@pipelineBindPoint@ ----- -   Transform feedback /must/ not be active+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02910# Transform feedback+--     /must/ not be active ----- -   The+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-deviceGeneratedCommands-02911#+--     The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-pGeneratedCommandsInfo-parameter#+--     @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid --     'GeneratedCommandsInfoNV' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-renderpass# This command+--     /must/ only be called inside of a render pass instance -- -- == Host Synchronization --@@ -638,31 +690,39 @@ -- -- == Valid Usage ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-02974#+--     @commandBuffer@ /must/ not be a protected command buffer ----- -   @pGeneratedCommandsInfo@\`s @indirectCommandsLayout@ /must/ have+-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-02927#+--     @pGeneratedCommandsInfo@\`s @indirectCommandsLayout@ /must/ have --     been created with the --     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' bit set ----- -   The+-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-deviceGeneratedCommands-02928#+--     The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-parameter#+--     @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid --     'GeneratedCommandsInfoNV' structure ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations ----- -   This command /must/ only be called outside of a render pass instance+-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-renderpass# This command+--     /must/ only be called outside of a render pass instance -- -- == Host Synchronization --@@ -715,40 +775,50 @@ -- -- == Valid Usage ----- -   @groupIndex@ /must/ be @0@ or less than the effective+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02893# @groupIndex@+--     /must/ be @0@ or less than the effective --     'GraphicsPipelineShaderGroupsCreateInfoNV'::@groupCount@ including --     the referenced pipelines ----- -   The @pipelineBindPoint@ /must/ be+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-02894# The+--     @pipelineBindPoint@ /must/ be --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   The same restrictions as+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02895# The same+--     restrictions as --     'Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline' apply as if --     the bound pipeline was created only with the Shader Group from the --     @groupIndex@ information ----- -   The+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-deviceGeneratedCommands-02896#+--     The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pipelineBindPoint@ /must/ be a valid+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value ----- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-pipeline-parameter# @pipeline@+--     /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics, or compute operations ----- -   Both of @commandBuffer@, and @pipeline@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdBindPipelineShaderGroupNV-commonparent# Both of+--     @commandBuffer@, and @pipeline@ /must/ have been created, allocated,+--     or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -807,18 +877,22 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkGetGeneratedCommandsMemoryRequirementsNV-deviceGeneratedCommands-02906#+--     The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkGetGeneratedCommandsMemoryRequirementsNV-device-parameter#+--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pInfo-parameter#+--     @pInfo@ /must/ be a valid pointer to a valid --     'GeneratedCommandsMemoryRequirementsInfoNV' structure ----- -   @pMemoryRequirements@ /must/ be a valid pointer to a+-- -   #VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pMemoryRequirements-parameter#+--     @pMemoryRequirements@ /must/ be a valid pointer to a --     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2' --     structure --@@ -860,22 +934,27 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCreateIndirectCommandsLayoutNV-deviceGeneratedCommands-02929#+--     The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateIndirectCommandsLayoutNV-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateIndirectCommandsLayoutNV-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'IndirectCommandsLayoutCreateInfoNV' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateIndirectCommandsLayoutNV-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pIndirectCommandsLayout@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateIndirectCommandsLayoutNV-pIndirectCommandsLayout-parameter#+--     @pIndirectCommandsLayout@ /must/ be a valid pointer to a --     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle -- -- == Return Codes@@ -948,35 +1027,43 @@ -- -- == Valid Usage ----- -   All submitted commands that refer to @indirectCommandsLayout@ /must/+-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02938#+--     All submitted commands that refer to @indirectCommandsLayout@ /must/ --     have completed execution ----- -   If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02939#+--     If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @indirectCommandsLayout@ was created, a compatible set --     of callbacks /must/ be provided here ----- -   If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were+-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02940#+--     If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were --     provided when @indirectCommandsLayout@ was created, @pAllocator@ --     /must/ be @NULL@ ----- -   The+-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-deviceGeneratedCommands-02941#+--     The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @indirectCommandsLayout@ is not+-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-parameter#+--     If @indirectCommandsLayout@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @indirectCommandsLayout@ --     /must/ be a valid --     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   If @indirectCommandsLayout@ is a valid handle, it /must/ have been+-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-parent#+--     If @indirectCommandsLayout@ is a valid handle, it /must/ have been --     created, allocated, or retrieved from @device@ -- -- == Host Synchronization@@ -1038,8 +1125,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV-  { -- | @deviceGeneratedCommands@ indicates whether the implementation supports-    -- functionality to generate commands on the device. See+  { -- | #features-deviceGeneratedCommands# @deviceGeneratedCommands@ indicates+    -- whether the implementation supports functionality to generate commands+    -- on the device. See     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#device-generated-commands Device-Generated Commands>.     deviceGeneratedCommands :: Bool }   deriving (Typeable, Eq)@@ -1192,33 +1280,40 @@ -- -- == Valid Usage ----- -   For @stageCount@, the same restrictions as in+-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-02888# For+--     @stageCount@, the same restrictions as in --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@ --     apply ----- -   For @pStages@, the same restrictions as in+-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-02889# For+--     @pStages@, the same restrictions as in --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pStages@ apply ----- -   For @pVertexInputState@, the same restrictions as in+-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pVertexInputState-02890# For+--     @pVertexInputState@, the same restrictions as in --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pVertexInputState@ --     apply ----- -   For @pTessellationState@, the same restrictions as in+-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pTessellationState-02891#+--     For @pTessellationState@, the same restrictions as in --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pTessellationState@ --     apply -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pNext-pNext# @pNext@ /must/+--     be @NULL@ ----- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@---     valid 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'---     structures+-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-parameter# @pStages@+--     /must/ be a valid pointer to an array of @stageCount@ valid+--     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures ----- -   @stageCount@ /must/ be greater than @0@+-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-arraylength#+--     @stageCount@ /must/ be greater than @0@ -- -- = See Also --@@ -1310,49 +1405,61 @@ -- -- == Valid Usage ----- -   @groupCount@ /must/ be at least @1@ and as maximum+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02879#+--     @groupCount@ /must/ be at least @1@ and as maximum --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxGraphicsShaderGroupCount@ ----- -   The sum of @groupCount@ including those groups added from referenced+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02880#+--     The sum of @groupCount@ including those groups added from referenced --     @pPipelines@ /must/ also be as maximum --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxGraphicsShaderGroupCount@ ----- -   The state of the first element of @pGroups@ /must/ match its---     equivalent within the parent’s+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02881# The+--     state of the first element of @pGroups@ /must/ match its equivalent+--     within the parent’s --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' ----- -   Each element of @pGroups@ /must/ in combination with the rest of the+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02882# Each+--     element of @pGroups@ /must/ in combination with the rest of the --     pipeline state yield a valid state configuration ----- -   All elements of @pGroups@ /must/ use the same shader stage---     combinations unless any mesh shader stage is used, then either---     combination of task and mesh or just mesh shader is valid+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02884# All+--     elements of @pGroups@ /must/ use the same shader stage combinations+--     unless any mesh shader stage is used, then either combination of+--     task and mesh or just mesh shader is valid ----- -   Mesh and regular primitive shading stages cannot be mixed across+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02885# Mesh+--     and regular primitive shading stages cannot be mixed across --     @pGroups@ ----- -   Each element of the @pPipelines@ member of @libraries@ /must/ have+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-02886#+--     Each element of the @pPipelines@ member of @libraries@ /must/ have --     been created with identical state to the pipeline currently created --     except the state that can be overriden by --     'GraphicsShaderGroupCreateInfoNV' ----- -   The+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-deviceGeneratedCommands-02887#+--     The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands> --     feature /must/ be enabled -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV' ----- -   @pGroups@ /must/ be a valid pointer to an array of @groupCount@+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-parameter#+--     @pGroups@ /must/ be a valid pointer to an array of @groupCount@ --     valid 'GraphicsShaderGroupCreateInfoNV' structures ----- -   If @pipelineCount@ is not @0@, @pPipelines@ /must/ be a valid+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-parameter#+--     If @pipelineCount@ is not @0@, @pPipelines@ /must/ be a valid --     pointer to an array of @pipelineCount@ valid --     'Vulkan.Core10.Handles.Pipeline' handles ----- -   @groupCount@ /must/ be greater than @0@+-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-arraylength#+--     @groupCount@ /must/ be greater than @0@ -- -- = See Also --@@ -1424,13 +1531,15 @@ -- -- == Valid Usage ----- -   The current bound graphics pipeline, as well as the pipelines it may---     reference, /must/ have been created with+-- -   #VUID-VkBindShaderGroupIndirectCommandNV-None-02944# The current+--     bound graphics pipeline, as well as the pipelines it may reference,+--     /must/ have been created with --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV' ----- -   The @index@ /must/ be within range of the accessible shader groups---     of the current bound graphics pipeline. See---     'cmdBindPipelineShaderGroupNV' for further details+-- -   #VUID-VkBindShaderGroupIndirectCommandNV-index-02945# The @index@+--     /must/ be within range of the accessible shader groups of the+--     current bound graphics pipeline. See 'cmdBindPipelineShaderGroupNV'+--     for further details -- -- = See Also --@@ -1477,20 +1586,23 @@ -- -- == Valid Usage ----- -   The buffer’s usage flag from which the address was acquired /must/---     have the+-- -   #VUID-VkBindIndexBufferIndirectCommandNV-None-02946# The buffer’s+--     usage flag from which the address was acquired /must/ have the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT' --     bit set ----- -   The @bufferAddress@ /must/ be aligned to the @indexType@ used+-- -   #VUID-VkBindIndexBufferIndirectCommandNV-bufferAddress-02947# The+--     @bufferAddress@ /must/ be aligned to the @indexType@ used ----- -   Each element of the buffer from which the address was acquired and---     that is non-sparse /must/ be bound completely and contiguously to a---     single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkBindIndexBufferIndirectCommandNV-None-02948# Each element of+--     the buffer from which the address was acquired and that is+--     non-sparse /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object -- -- == Valid Usage (Implicit) ----- -   @indexType@ /must/ be a valid+-- -   #VUID-VkBindIndexBufferIndirectCommandNV-indexType-parameter#+--     @indexType@ /must/ be a valid --     'Vulkan.Core10.Enums.IndexType.IndexType' value -- -- = See Also@@ -1559,14 +1671,15 @@ -- -- == Valid Usage ----- -   The buffer’s usage flag from which the address was acquired /must/---     have the+-- -   #VUID-VkBindVertexBufferIndirectCommandNV-None-02949# The buffer’s+--     usage flag from which the address was acquired /must/ have the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT' --     bit set ----- -   Each element of the buffer from which the address was acquired and---     that is non-sparse /must/ be bound completely and contiguously to a---     single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkBindVertexBufferIndirectCommandNV-None-02950# Each element+--     of the buffer from which the address was acquired and that is+--     non-sparse /must/ be bound completely and contiguously to a single+--     'Vulkan.Core10.Handles.DeviceMemory' object -- -- = See Also --@@ -1679,19 +1792,23 @@ -- -- == Valid Usage ----- -   The @buffer@’s usage flag /must/ have the+-- -   #VUID-VkIndirectCommandsStreamNV-buffer-02942# The @buffer@’s usage+--     flag /must/ have the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   The @offset@ /must/ be aligned to+-- -   #VUID-VkIndirectCommandsStreamNV-offset-02943# The @offset@ /must/+--     be aligned to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@ ----- -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkIndirectCommandsStreamNV-buffer-02975# If @buffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object -- -- == Valid Usage (Implicit) ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkIndirectCommandsStreamNV-buffer-parameter# @buffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.Buffer' handle -- -- = See Also --@@ -1748,76 +1865,93 @@ -- -- == Valid Usage ----- -   @stream@ /must/ be smaller than---     'IndirectCommandsLayoutCreateInfoNV'::@streamCount@+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-stream-02951# @stream@ /must/+--     be smaller than 'IndirectCommandsLayoutCreateInfoNV'::@streamCount@ ----- -   @offset@ /must/ be less than or equal to+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-offset-02952# @offset@ /must/+--     be less than or equal to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsTokenOffset@ ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV',+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02976# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV', --     @vertexBindingUnit@ /must/ stay within device supported limits for --     the appropriate commands ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02977# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', --     @pushconstantPipelineLayout@ /must/ be valid ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02978# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', --     @pushconstantOffset@ /must/ be a multiple of @4@ ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02979# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', --     @pushconstantSize@ /must/ be a multiple of @4@ ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02980# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', --     @pushconstantOffset@ /must/ be less than --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@ ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02981# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', --     @pushconstantSize@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@ --     minus @pushconstantOffset@ ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',---     for each byte in the range specified by @pushconstantOffset@ and+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02982# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', for+--     each byte in the range specified by @pushconstantOffset@ and --     @pushconstantSize@ and for each shader stage in --     @pushconstantShaderStageFlags@, there /must/ be a push constant --     range in @pushconstantPipelineLayout@ that includes that byte and --     that stage ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',---     for each byte in the range specified by @pushconstantOffset@ and+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02983# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', for+--     each byte in the range specified by @pushconstantOffset@ and --     @pushconstantSize@ and for each push constant range that overlaps --     that byte, @pushconstantShaderStageFlags@ /must/ include all stages --     in that push constant range’s --     'Vulkan.Core10.PipelineLayout.PushConstantRange'::@pushconstantShaderStageFlags@ ----- -   If @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV',+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02984# If+--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV', --     @indirectStateFlags@ /must/ not be ´0´ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @tokenType@ /must/ be a valid 'IndirectCommandsTokenTypeNV' value+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-parameter#+--     @tokenType@ /must/ be a valid 'IndirectCommandsTokenTypeNV' value ----- -   If @pushconstantPipelineLayout@ is not+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pushconstantPipelineLayout-parameter#+--     If @pushconstantPipelineLayout@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @pushconstantPipelineLayout@ /must/ be a valid --     'Vulkan.Core10.Handles.PipelineLayout' handle ----- -   @pushconstantShaderStageFlags@ /must/ be a valid combination of+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pushconstantShaderStageFlags-parameter#+--     @pushconstantShaderStageFlags@ /must/ be a valid combination of --     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values ----- -   @indirectStateFlags@ /must/ be a valid combination of+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-indirectStateFlags-parameter#+--     @indirectStateFlags@ /must/ be a valid combination of --     'IndirectStateFlagBitsNV' values ----- -   If @indexTypeCount@ is not @0@, @pIndexTypes@ /must/ be a valid---     pointer to an array of @indexTypeCount@ valid+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pIndexTypes-parameter# If+--     @indexTypeCount@ is not @0@, @pIndexTypes@ /must/ be a valid pointer+--     to an array of @indexTypeCount@ valid --     'Vulkan.Core10.Enums.IndexType.IndexType' values ----- -   If @indexTypeCount@ is not @0@, @pIndexTypeValues@ /must/ be a valid+-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pIndexTypeValues-parameter# If+--     @indexTypeCount@ is not @0@, @pIndexTypeValues@ /must/ be a valid --     pointer to an array of @indexTypeCount@ @uint32_t@ values -- -- = See Also@@ -1977,61 +2111,78 @@ -- -- == Valid Usage ----- -   The @pipelineBindPoint@ /must/ be+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-02930#+--     The @pipelineBindPoint@ /must/ be --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   @tokenCount@ /must/ be greater than @0@ and less than or equal to+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-02931#+--     @tokenCount@ /must/ be greater than @0@ and less than or equal to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsTokenCount@ ----- -   If @pTokens@ contains an entry of+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02932# If+--     @pTokens@ contains an entry of --     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV' it /must/ be the --     first element of the array and there /must/ be only a single element --     of such token type ----- -   If @pTokens@ contains an entry of+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02933# If+--     @pTokens@ contains an entry of --     'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV' there /must/ be only a --     single element of such token type ----- -   All state tokens in @pTokens@ /must/ occur prior work provoking---     tokens ('INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV',+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02934# All state+--     tokens in @pTokens@ /must/ occur prior work provoking tokens+--     ('INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV', --     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV', --     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV') ----- -   The content of @pTokens@ /must/ include one single work provoking---     token that is compatible with the @pipelineBindPoint@+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02935# The+--     content of @pTokens@ /must/ include one single work provoking token+--     that is compatible with the @pipelineBindPoint@ ----- -   @streamCount@ /must/ be greater than @0@ and less or equal to+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-02936#+--     @streamCount@ /must/ be greater than @0@ and less or equal to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsStreamCount@ ----- -   each element of @pStreamStrides@ /must/ be greater than \`0\`and+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-02937#+--     each element of @pStreamStrides@ /must/ be greater than \`0\`and --     less than or equal to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsStreamStride@. --     Furthermore the alignment of each token input /must/ be ensured -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pNext-pNext# @pNext@+--     /must/ be @NULL@ ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-flags-parameter# @flags@+--     /must/ be a valid combination of --     'IndirectCommandsLayoutUsageFlagBitsNV' values ----- -   @flags@ /must/ not be @0@+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-flags-requiredbitmask#+--     @flags@ /must/ not be @0@ ----- -   @pipelineBindPoint@ /must/ be a valid+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value ----- -   @pTokens@ /must/ be a valid pointer to an array of @tokenCount@+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-parameter#+--     @pTokens@ /must/ be a valid pointer to an array of @tokenCount@ --     valid 'IndirectCommandsLayoutTokenNV' structures ----- -   @pStreamStrides@ /must/ be a valid pointer to an array of+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-parameter#+--     @pStreamStrides@ /must/ be a valid pointer to an array of --     @streamCount@ @uint32_t@ values ----- -   @tokenCount@ /must/ be greater than @0@+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-arraylength#+--     @tokenCount@ /must/ be greater than @0@ ----- -   @streamCount@ /must/ be greater than @0@+-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-arraylength#+--     @streamCount@ /must/ be greater than @0@ -- -- = See Also --@@ -2118,121 +2269,147 @@ -- -- == Valid Usage ----- -   The provided @pipeline@ /must/ match the pipeline bound at execution---     time+-- -   #VUID-VkGeneratedCommandsInfoNV-pipeline-02912# The provided+--     @pipeline@ /must/ match the pipeline bound at execution time ----- -   If the @indirectCommandsLayout@ uses a token of+-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02913# If the+--     @indirectCommandsLayout@ uses a token of --     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV', then the @pipeline@ --     /must/ have been created with multiple shader groups ----- -   If the @indirectCommandsLayout@ uses a token of+-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02914# If the+--     @indirectCommandsLayout@ uses a token of --     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV', then the @pipeline@ --     /must/ have been created with --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV' --     set in 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@flags@ ----- -   If the @indirectCommandsLayout@ uses a token of+-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02915# If the+--     @indirectCommandsLayout@ uses a token of --     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', then the --     @pipeline@\`s 'Vulkan.Core10.Handles.PipelineLayout' /must/ match --     the 'IndirectCommandsLayoutTokenNV'::@pushconstantPipelineLayout@ ----- -   @streamCount@ /must/ match the @indirectCommandsLayout@’s---     @streamCount@+-- -   #VUID-VkGeneratedCommandsInfoNV-streamCount-02916# @streamCount@+--     /must/ match the @indirectCommandsLayout@’s @streamCount@ ----- -   @sequencesCount@ /must/ be less or equal to+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCount-02917#+--     @sequencesCount@ /must/ be less or equal to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectSequenceCount@ --     and 'GeneratedCommandsMemoryRequirementsInfoNV'::@maxSequencesCount@ --     that was used to determine the @preprocessSize@ ----- -   @preprocessBuffer@ /must/ have the+-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02918#+--     @preprocessBuffer@ /must/ have the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set in its usage flag ----- -   @preprocessOffset@ /must/ be aligned to+-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessOffset-02919#+--     @preprocessOffset@ /must/ be aligned to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@ ----- -   If @preprocessBuffer@ is non-sparse then it /must/ be bound---     completely and contiguously to a single---     'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02971# If+--     @preprocessBuffer@ is non-sparse then it /must/ be bound completely+--     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'+--     object ----- -   @preprocessSize@ /must/ be at least equal to the memory+-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessSize-02920#+--     @preprocessSize@ /must/ be at least equal to the memory --     requirement\`s size returned by --     'getGeneratedCommandsMemoryRequirementsNV' using the matching inputs --     (@indirectCommandsLayout@, …​) as within this structure ----- -   @sequencesCountBuffer@ /can/ be set if the actual used count of+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02921#+--     @sequencesCountBuffer@ /can/ be set if the actual used count of --     sequences is sourced from the provided buffer. In that case the --     @sequencesCount@ serves as upper bound ----- -   If @sequencesCountBuffer@ is not+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02922# If+--     @sequencesCountBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', its usage flag /must/ have --     the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   If @sequencesCountBuffer@ is not+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02923# If+--     @sequencesCountBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesCountOffset@ --     /must/ be aligned to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minSequencesCountBufferOffsetAlignment@ ----- -   If @sequencesCountBuffer@ is not+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02972# If+--     @sequencesCountBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE' and is non-sparse then it --     /must/ be bound completely and contiguously to a single --     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   If @indirectCommandsLayout@’s+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02924# If+--     @indirectCommandsLayout@’s --     'INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV' is set, --     @sequencesIndexBuffer@ /must/ be set otherwise it /must/ be --     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @sequencesIndexBuffer@ is not+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02925# If+--     @sequencesIndexBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', its usage flag /must/ have --     the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   If @sequencesIndexBuffer@ is not+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02926# If+--     @sequencesIndexBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesIndexOffset@ --     /must/ be aligned to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minSequencesIndexBufferOffsetAlignment@ ----- -   If @sequencesIndexBuffer@ is not+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02973# If+--     @sequencesIndexBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE' and is non-sparse then it --     /must/ be bound completely and contiguously to a single --     'Vulkan.Core10.Handles.DeviceMemory' object -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkGeneratedCommandsInfoNV-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkGeneratedCommandsInfoNV-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @pipelineBindPoint@ /must/ be a valid+-- -   #VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value ----- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+-- -   #VUID-VkGeneratedCommandsInfoNV-pipeline-parameter# @pipeline@+--     /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle ----- -   @indirectCommandsLayout@ /must/ be a valid+-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-parameter#+--     @indirectCommandsLayout@ /must/ be a valid --     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle ----- -   @pStreams@ /must/ be a valid pointer to an array of @streamCount@---     valid 'IndirectCommandsStreamNV' structures+-- -   #VUID-VkGeneratedCommandsInfoNV-pStreams-parameter# @pStreams@+--     /must/ be a valid pointer to an array of @streamCount@ valid+--     'IndirectCommandsStreamNV' structures ----- -   @preprocessBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'+-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-parameter#+--     @preprocessBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' --     handle ----- -   If @sequencesCountBuffer@ is not+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-parameter# If+--     @sequencesCountBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesCountBuffer@ --     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   If @sequencesIndexBuffer@ is not+-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-parameter# If+--     @sequencesIndexBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesIndexBuffer@ --     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @streamCount@ /must/ be greater than @0@+-- -   #VUID-VkGeneratedCommandsInfoNV-streamCount-arraylength#+--     @streamCount@ /must/ be greater than @0@ ----- -   Each of @indirectCommandsLayout@, @pipeline@, @preprocessBuffer@,+-- -   #VUID-VkGeneratedCommandsInfoNV-commonparent# Each of+--     @indirectCommandsLayout@, @pipeline@, @preprocessBuffer@, --     @sequencesCountBuffer@, and @sequencesIndexBuffer@ that are valid --     handles of non-ignored parameters /must/ have been created, --     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'@@ -2374,25 +2551,32 @@ -- -- == Valid Usage ----- -   @maxSequencesCount@ /must/ be less or equal to+-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-maxSequencesCount-02907#+--     @maxSequencesCount@ /must/ be less or equal to --     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectSequenceCount@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pNext-pNext#+--     @pNext@ /must/ be @NULL@ ----- -   @pipelineBindPoint@ /must/ be a valid+-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-parameter#+--     @pipelineBindPoint@ /must/ be a valid --     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value ----- -   @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipeline-parameter#+--     @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle ----- -   @indirectCommandsLayout@ /must/ be a valid+-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-indirectCommandsLayout-parameter#+--     @indirectCommandsLayout@ /must/ be a valid --     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle ----- -   Both of @indirectCommandsLayout@, and @pipeline@ /must/ have been+-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-commonparent# Both+--     of @indirectCommandsLayout@, and @pipeline@ /must/ have been --     created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' --
src/Vulkan/Extensions/VK_NV_external_memory.hs view
@@ -46,6 +46,7 @@     -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'     -- specifying one or more external memory handle types.     --+    -- #VUID-VkExternalMemoryImageCreateInfoNV-handleTypes-parameter#     -- @handleTypes@ /must/ be a valid combination of     -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'     -- values@@ -104,7 +105,8 @@     -- as they are compatible, as reported by     -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.getPhysicalDeviceExternalImageFormatPropertiesNV'.     ---    -- @handleTypes@ /must/ be a valid combination of+    -- #VUID-VkExportMemoryAllocateInfoNV-handleTypes-parameter# @handleTypes@+    -- /must/ be a valid combination of     -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'     -- values     handleTypes :: ExternalMemoryHandleTypeFlagsNV }
src/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs view
@@ -129,42 +129,50 @@                                                  => -- | @physicalDevice@ is the physical device from which to query the image                                                     -- capabilities                                                     --+                                                    -- #VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-physicalDevice-parameter#                                                     -- @physicalDevice@ /must/ be a valid                                                     -- 'Vulkan.Core10.Handles.PhysicalDevice' handle                                                     PhysicalDevice                                                  -> -- | @format@ is the image format, corresponding to                                                     -- 'Vulkan.Core10.Image.ImageCreateInfo'::@format@.                                                     --+                                                    -- #VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-format-parameter#                                                     -- @format@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value                                                     Format                                                  -> -- | @type@ is the image type, corresponding to                                                     -- 'Vulkan.Core10.Image.ImageCreateInfo'::@imageType@.                                                     --+                                                    -- #VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-type-parameter#                                                     -- @type@ /must/ be a valid 'Vulkan.Core10.Enums.ImageType.ImageType' value                                                     ImageType                                                  -> -- | @tiling@ is the image tiling, corresponding to                                                     -- 'Vulkan.Core10.Image.ImageCreateInfo'::@tiling@.                                                     --+                                                    -- #VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-tiling-parameter#                                                     -- @tiling@ /must/ be a valid 'Vulkan.Core10.Enums.ImageTiling.ImageTiling'                                                     -- value                                                     ImageTiling                                                  -> -- | @usage@ is the intended usage of the image, corresponding to                                                     -- 'Vulkan.Core10.Image.ImageCreateInfo'::@usage@.                                                     --+                                                    -- #VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-usage-parameter#                                                     -- @usage@ /must/ be a valid combination of                                                     -- 'Vulkan.Core10.Enums.ImageUsageFlagBits.ImageUsageFlagBits' values                                                     --+                                                    -- #VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-usage-requiredbitmask#                                                     -- @usage@ /must/ not be @0@                                                     ImageUsageFlags                                                  -> -- | @flags@ is a bitmask describing additional parameters of the image,                                                     -- corresponding to 'Vulkan.Core10.Image.ImageCreateInfo'::@flags@.                                                     --+                                                    -- #VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-flags-parameter#                                                     -- @flags@ /must/ be a valid combination of                                                     -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.ImageCreateFlagBits' values                                                     ImageCreateFlags                                                  -> -- | @externalHandleType@ is either one of the bits from                                                     -- 'ExternalMemoryHandleTypeFlagBitsNV', or 0.                                                     --+                                                    -- #VUID-vkGetPhysicalDeviceExternalImageFormatPropertiesNV-externalHandleType-parameter#                                                     -- @externalHandleType@ /must/ be a valid combination of                                                     -- 'ExternalMemoryHandleTypeFlagBitsNV' values                                                     ("externalHandleType" ::: ExternalMemoryHandleTypeFlagsNV)
src/Vulkan/Extensions/VK_NV_external_memory_win32.hs view
@@ -93,27 +93,33 @@                         . (MonadIO io)                        => -- | @device@ is the logical device that owns the memory.                           ---                          -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                          -- #VUID-vkGetMemoryWin32HandleNV-device-parameter# @device@ /must/ be a+                          -- valid 'Vulkan.Core10.Handles.Device' handle                           Device                        -> -- | @memory@ is the 'Vulkan.Core10.Handles.DeviceMemory' object.                           ---                          -- @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory' handle+                          -- #VUID-vkGetMemoryWin32HandleNV-memory-parameter# @memory@ /must/ be a+                          -- valid 'Vulkan.Core10.Handles.DeviceMemory' handle                           ---                          -- @memory@ /must/ have been created, allocated, or retrieved from @device@+                          -- #VUID-vkGetMemoryWin32HandleNV-memory-parent# @memory@ /must/ have been+                          -- created, allocated, or retrieved from @device@                           DeviceMemory                        -> -- | @handleType@ is a bitmask of                           -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'                           -- containing a single bit specifying the type of handle requested.                           ---                          -- @handleType@ /must/ be a flag specified in+                          -- #VUID-vkGetMemoryWin32HandleNV-handleType-01326# @handleType@ /must/ be+                          -- a flag specified in                           -- 'Vulkan.Extensions.VK_NV_external_memory.ExportMemoryAllocateInfoNV'::@handleTypes@                           -- when allocating @memory@                           ---                          -- @handleType@ /must/ be a valid combination of+                          -- #VUID-vkGetMemoryWin32HandleNV-handleType-parameter# @handleType@ /must/+                          -- be a valid combination of                           -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'                           -- values                           ---                          -- @handleType@ /must/ not be @0@+                          -- #VUID-vkGetMemoryWin32HandleNV-handleType-requiredbitmask# @handleType@+                          -- /must/ not be @0@                           ExternalMemoryHandleTypeFlagsNV                        -> io (HANDLE) getMemoryWin32HandleNV device memory handleType = liftIO . evalContT $ do@@ -147,16 +153,18 @@     -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'     -- value specifying the type of memory handle in @handle@.     ---    -- @handleType@ /must/ not have more than one bit set+    -- #VUID-VkImportMemoryWin32HandleInfoNV-handleType-01327# @handleType@+    -- /must/ not have more than one bit set     ---    -- @handleType@ /must/ be a valid combination of+    -- #VUID-VkImportMemoryWin32HandleInfoNV-handleType-parameter# @handleType@+    -- /must/ be a valid combination of     -- 'Vulkan.Extensions.VK_NV_external_memory_capabilities.ExternalMemoryHandleTypeFlagBitsNV'     -- values     handleType :: ExternalMemoryHandleTypeFlagsNV   , -- | @handle@ is a Windows 'HANDLE' referring to the memory.     ---    -- @handle@ /must/ be a valid handle to memory, obtained as specified by-    -- @handleType@+    -- #VUID-VkImportMemoryWin32HandleInfoNV-handle-01328# @handle@ /must/ be a+    -- valid handle to memory, obtained as specified by @handleType@     handle :: HANDLE   }   deriving (Typeable, Eq)@@ -218,11 +226,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkExportMemoryWin32HandleInfoNV-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV' ----- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid---     pointer to a valid 'SECURITY_ATTRIBUTES' value+-- -   #VUID-VkExportMemoryWin32HandleInfoNV-pAttributes-parameter# If+--     @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid pointer+--     to a valid 'SECURITY_ATTRIBUTES' value -- -- = See Also --
src/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs view
@@ -71,7 +71,8 @@ -- -- == Valid Usage ----- -   If @coverageToColorEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',+-- -   #VUID-VkPipelineCoverageToColorStateCreateInfoNV-coverageToColorEnable-01404#+--     If @coverageToColorEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', --     then the render pass subpass indicated by --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@ --     and 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@subpass@@@ -87,10 +88,12 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineCoverageToColorStateCreateInfoNV-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV' ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkPipelineCoverageToColorStateCreateInfoNV-flags-zerobitmask#+--     @flags@ /must/ be @0@ -- -- = See Also --
src/Vulkan/Extensions/VK_NV_fragment_shader_barycentric.hs view
@@ -58,10 +58,10 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceFragmentShaderBarycentricFeaturesNV = PhysicalDeviceFragmentShaderBarycentricFeaturesNV-  { -- | @fragmentShaderBarycentric@ indicates that the implementation supports-    -- the @BaryCoordNV@ and @BaryCoordNoPerspNV@ SPIR-V fragment shader-    -- built-ins and supports the @PerVertexNV@ SPIR-V decoration on fragment-    -- shader input variables.+  { -- | #features-fragmentShaderBarycentric# @fragmentShaderBarycentric@+    -- indicates that the implementation supports the @BaryCoordNV@ and+    -- @BaryCoordNoPerspNV@ SPIR-V fragment shader built-ins and supports the+    -- @PerVertexNV@ SPIR-V decoration on fragment shader input variables.     fragmentShaderBarycentric :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
+ src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs view
@@ -0,0 +1,677 @@+{-# language CPP #-}+module Vulkan.Extensions.VK_NV_fragment_shading_rate_enums  ( cmdSetFragmentShadingRateEnumNV+                                                            , PhysicalDeviceFragmentShadingRateEnumsFeaturesNV(..)+                                                            , PhysicalDeviceFragmentShadingRateEnumsPropertiesNV(..)+                                                            , PipelineFragmentShadingRateEnumStateCreateInfoNV(..)+                                                            , FragmentShadingRateNV( FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV+                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV+                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV+                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV+                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV+                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV+                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV+                                                                                   , FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV+                                                                                   , FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV+                                                                                   , FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV+                                                                                   , FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV+                                                                                   , FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV+                                                                                   , ..+                                                                                   )+                                                            , FragmentShadingRateTypeNV( FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV+                                                                                       , FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV+                                                                                       , ..+                                                                                       )+                                                            , NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION+                                                            , pattern NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION+                                                            , NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME+                                                            , pattern NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME+                                                            , FragmentShadingRateCombinerOpKHR(..)+                                                            ) where++import Vulkan.CStruct.Utils (FixedArray)+import Control.Monad (unless)+import Control.Monad.IO.Class (liftIO)+import Foreign.Marshal.Alloc (allocaBytesAligned)+import GHC.IO (throwIO)+import GHC.Ptr (nullFunPtr)+import Foreign.Ptr (nullPtr)+import Foreign.Ptr (plusPtr)+import GHC.Read (choose)+import GHC.Read (expectP)+import GHC.Read (parens)+import GHC.Show (showParen)+import GHC.Show (showString)+import GHC.Show (showsPrec)+import Text.ParserCombinators.ReadPrec ((+++))+import Text.ParserCombinators.ReadPrec (prec)+import Text.ParserCombinators.ReadPrec (step)+import Control.Monad.Trans.Class (lift)+import Control.Monad.Trans.Cont (evalContT)+import Control.Monad.IO.Class (MonadIO)+import Data.String (IsString)+import Data.Typeable (Typeable)+import Foreign.Storable (Storable)+import Foreign.Storable (Storable(peek))+import Foreign.Storable (Storable(poke))+import qualified Foreign.Storable (Storable(..))+import GHC.Generics (Generic)+import GHC.IO.Exception (IOErrorType(..))+import GHC.IO.Exception (IOException(..))+import Data.Int (Int32)+import Foreign.Ptr (FunPtr)+import Foreign.Ptr (Ptr)+import GHC.Read (Read(readPrec))+import Text.Read.Lex (Lexeme(Ident))+import Data.Kind (Type)+import Control.Monad.Trans.Cont (ContT(..))+import Vulkan.CStruct.Utils (advancePtrBytes)+import Vulkan.Core10.FundamentalTypes (bool32ToBool)+import Vulkan.Core10.FundamentalTypes (boolToBool32)+import Vulkan.CStruct.Utils (lowerArrayPtr)+import Vulkan.NamedType ((:::))+import Vulkan.Core10.FundamentalTypes (Bool32)+import Vulkan.Core10.Handles (CommandBuffer)+import Vulkan.Core10.Handles (CommandBuffer(..))+import Vulkan.Core10.Handles (CommandBuffer_T)+import Vulkan.Dynamic (DeviceCmds(pVkCmdSetFragmentShadingRateEnumNV))+import Vulkan.Extensions.VK_KHR_fragment_shading_rate (FragmentShadingRateCombinerOpKHR)+import Vulkan.Extensions.VK_KHR_fragment_shading_rate (FragmentShadingRateCombinerOpKHR(..))+import Vulkan.CStruct (FromCStruct)+import Vulkan.CStruct (FromCStruct(..))+import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)+import Vulkan.Core10.Enums.StructureType (StructureType)+import Vulkan.CStruct (ToCStruct)+import Vulkan.CStruct (ToCStruct(..))+import Vulkan.Zero (Zero)+import Vulkan.Zero (Zero(..))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV))+import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV))+import Vulkan.Extensions.VK_KHR_fragment_shading_rate (FragmentShadingRateCombinerOpKHR(..))+foreign import ccall+#if !defined(SAFE_FOREIGN_CALLS)+  unsafe+#endif+  "dynamic" mkVkCmdSetFragmentShadingRateEnumNV+  :: FunPtr (Ptr CommandBuffer_T -> FragmentShadingRateNV -> Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR) -> IO ()) -> Ptr CommandBuffer_T -> FragmentShadingRateNV -> Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR) -> IO ()++-- | vkCmdSetFragmentShadingRateEnumNV - Set pipeline fragment shading rate+-- dynamically using enums+--+-- == Valid Usage+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04576#+--     If+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate>+--     is not enabled, @shadingRate@ /must/ be+--     'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV'+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-supersampleFragmentShadingRates-04577#+--     If+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supersampleFragmentShadingRates supersampleFragmentShadingRates>+--     is not enabled, @shadingRate@ /must/ not be+--     'FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV',+--     'FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV',+--     'FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV', or+--     'FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV'+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-noInvocationFragmentShadingRates-04578#+--     If+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-noInvocationFragmentShadingRates noInvocationFragmentShadingRates>+--     is not enabled, @shadingRate@ /must/ not be+--     'FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV'+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentShadingRateEnums-04579#+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentShadingRateEnums fragmentShadingRateEnums>+--     /must/ be enabled+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04580#+--     One of+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate>,+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate>,+--     or+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>+--     /must/ be enabled+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-primitiveFragmentShadingRate-04581#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>+--     is not enabled, @combinerOps@[0] /must/ be+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-attachmentFragmentShadingRate-04582#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-attachmentFragmentShadingRate attachmentFragmentShadingRate feature>+--     is not enabled, @combinerOps@[1] /must/ be+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentSizeNonTrivialCombinerOps-04583#+--     If the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentSizeNonTrivialCombinerOps>+--     limit is not supported, elements of @combinerOps@ /must/ be either+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'+--     or+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid+--     'Vulkan.Core10.Handles.CommandBuffer' handle+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-shadingRate-parameter#+--     @shadingRate@ /must/ be a valid 'FragmentShadingRateNV' value+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-combinerOps-parameter# Any+--     given element of @combinerOps@ /must/ be a valid+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'+--     value+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>+--+-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+--     allocated from /must/ support graphics operations+--+-- == Host Synchronization+--+-- -   Host access to @commandBuffer@ /must/ be externally synchronized+--+-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that+--     @commandBuffer@ was allocated from /must/ be externally synchronized+--+-- == Command Properties+--+-- \'+--+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |+-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================++-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |+-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |+-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------++--+-- = See Also+--+-- 'Vulkan.Core10.Handles.CommandBuffer',+-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR',+-- 'FragmentShadingRateNV'+cmdSetFragmentShadingRateEnumNV :: forall io+                                 . (MonadIO io)+                                => -- | @commandBuffer@ is the command buffer into which the command will be+                                   -- recorded.+                                   CommandBuffer+                                -> -- | @shadingRate@ specifies a 'FragmentShadingRateNV' enum indicating the+                                   -- pipeline fragment shading rate for subsequent draw commands.+                                   FragmentShadingRateNV+                                -> -- | @combinerOps@ specifies a+                                   -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'+                                   -- determining how the+                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-pipeline pipeline>,+                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-primitive primitive>,+                                   -- and+                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment attachment shading rates>+                                   -- are+                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-combining combined>+                                   -- for fragments generated by subsequent drawing commands.+                                   ("combinerOps" ::: (FragmentShadingRateCombinerOpKHR, FragmentShadingRateCombinerOpKHR))+                                -> io ()+cmdSetFragmentShadingRateEnumNV commandBuffer shadingRate combinerOps = liftIO . evalContT $ do+  let vkCmdSetFragmentShadingRateEnumNVPtr = pVkCmdSetFragmentShadingRateEnumNV (deviceCmds (commandBuffer :: CommandBuffer))+  lift $ unless (vkCmdSetFragmentShadingRateEnumNVPtr /= nullFunPtr) $+    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkCmdSetFragmentShadingRateEnumNV is null" Nothing Nothing+  let vkCmdSetFragmentShadingRateEnumNV' = mkVkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNVPtr+  pCombinerOps <- ContT $ allocaBytesAligned @(FixedArray 2 FragmentShadingRateCombinerOpKHR) 8 4+  let pCombinerOps' = lowerArrayPtr pCombinerOps+  lift $ case (combinerOps) of+    (e0, e1) -> do+      poke (pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR) (e0)+      poke (pCombinerOps' `plusPtr` 4 :: Ptr FragmentShadingRateCombinerOpKHR) (e1)+  lift $ vkCmdSetFragmentShadingRateEnumNV' (commandBufferHandle (commandBuffer)) (shadingRate) (pCombinerOps)+  pure $ ()+++-- | VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV - Structure+-- indicating support for fragment shading rate enums+--+-- = Members+--+-- The members of the 'PhysicalDeviceFragmentShadingRateEnumsFeaturesNV'+-- structure describe the following features:+--+-- = Description+--+-- If the 'PhysicalDeviceFragmentShadingRateEnumsFeaturesNV' structure is+-- included in the @pNext@ chain of+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',+-- it is filled with values indicating whether each feature is supported.+-- 'PhysicalDeviceFragmentShadingRateEnumsFeaturesNV' /can/ also be used in+-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable+-- these features.+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.FundamentalTypes.Bool32',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = PhysicalDeviceFragmentShadingRateEnumsFeaturesNV+  { -- | #features-fragmentShadingRateEnums# @fragmentShadingRateEnums@ indicates+    -- that the implementation supports specifying fragment shading rates using+    -- the 'FragmentShadingRateNV' enumerated type.+    fragmentShadingRateEnums :: Bool+  , -- | #features-supersampleFragmentShadingRates#+    -- @supersampleFragmentShadingRates@ indicates that the implementation+    -- supports fragment shading rate enum values indicating more than one+    -- invocation per fragment.+    supersampleFragmentShadingRates :: Bool+  , -- | #features-noInvocationFragmentShadingRates#+    -- @noInvocationFragmentShadingRates@ indicates that the implementation+    -- supports a fragment shading rate enum value indicating that no fragment+    -- shaders should be invoked when that shading rate is used.+    noInvocationFragmentShadingRates :: Bool+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV)+#endif+deriving instance Show PhysicalDeviceFragmentShadingRateEnumsFeaturesNV++instance ToCStruct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PhysicalDeviceFragmentShadingRateEnumsFeaturesNV{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (fragmentShadingRateEnums))+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (supersampleFragmentShadingRates))+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (noInvocationFragmentShadingRates))+    f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 20 :: Ptr Bool32)) (boolToBool32 (zero))+    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))+    f++instance FromCStruct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV where+  peekCStruct p = do+    fragmentShadingRateEnums <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))+    supersampleFragmentShadingRates <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))+    noInvocationFragmentShadingRates <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))+    pure $ PhysicalDeviceFragmentShadingRateEnumsFeaturesNV+             (bool32ToBool fragmentShadingRateEnums) (bool32ToBool supersampleFragmentShadingRates) (bool32ToBool noInvocationFragmentShadingRates)++instance Storable PhysicalDeviceFragmentShadingRateEnumsFeaturesNV where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PhysicalDeviceFragmentShadingRateEnumsFeaturesNV where+  zero = PhysicalDeviceFragmentShadingRateEnumsFeaturesNV+           zero+           zero+           zero+++-- | VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV - Structure+-- describing fragment shading rate limits that can be supported by an+-- implementation+--+-- = Members+--+-- The members of the 'PhysicalDeviceFragmentShadingRateEnumsPropertiesNV'+-- structure describe the following implementation-dependent properties+-- related to+-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-primsrast-fragment-shading-rate fragment shading rates>:+--+-- = Description+--+-- If the 'PhysicalDeviceFragmentShadingRateEnumsPropertiesNV' structure is+-- included in the @pNext@ chain of+-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',+-- it is filled with the implementation-dependent limits.+--+-- == Valid Usage (Implicit)+--+-- = See Also+--+-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PhysicalDeviceFragmentShadingRateEnumsPropertiesNV = PhysicalDeviceFragmentShadingRateEnumsPropertiesNV+  { -- | #limits-maxFragmentShadingRateInvocationCount#+    -- @maxFragmentShadingRateInvocationCount@ indicates the maximum number of+    -- fragment shader invocations per fragment supported in pipeline,+    -- primitive, and attachment fragment shading rates.+    --+    -- #VUID-VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV-maxFragmentShadingRateInvocationCount-parameter#+    -- @maxFragmentShadingRateInvocationCount@ /must/ be a valid+    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value+    maxFragmentShadingRateInvocationCount :: SampleCountFlagBits }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PhysicalDeviceFragmentShadingRateEnumsPropertiesNV)+#endif+deriving instance Show PhysicalDeviceFragmentShadingRateEnumsPropertiesNV++instance ToCStruct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV where+  withCStruct x f = allocaBytesAligned 24 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PhysicalDeviceFragmentShadingRateEnumsPropertiesNV{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr SampleCountFlagBits)) (maxFragmentShadingRateInvocationCount)+    f+  cStructSize = 24+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr SampleCountFlagBits)) (zero)+    f++instance FromCStruct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV where+  peekCStruct p = do+    maxFragmentShadingRateInvocationCount <- peek @SampleCountFlagBits ((p `plusPtr` 16 :: Ptr SampleCountFlagBits))+    pure $ PhysicalDeviceFragmentShadingRateEnumsPropertiesNV+             maxFragmentShadingRateInvocationCount++instance Storable PhysicalDeviceFragmentShadingRateEnumsPropertiesNV where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PhysicalDeviceFragmentShadingRateEnumsPropertiesNV where+  zero = PhysicalDeviceFragmentShadingRateEnumsPropertiesNV+           zero+++-- | VkPipelineFragmentShadingRateEnumStateCreateInfoNV - Structure+-- specifying parameters controlling the fragment shading rate using rate+-- enums+--+-- = Description+--+-- If the @pNext@ chain of+-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' includes a+-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV' structure, then that+-- structure includes parameters that control the pipeline fragment shading+-- rate.+--+-- If this structure is not present, @shadingRateType@ is considered to be+-- equal to 'FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV', @shadingRate@ is+-- considered to be equal to+-- 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV', and both elements of+-- @combinerOps@ are considered to be equal to+-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'.+--+-- == Valid Usage (Implicit)+--+-- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-sType-sType#+--     @sType@ /must/ be+--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV'+--+-- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-shadingRateType-parameter#+--     @shadingRateType@ /must/ be a valid 'FragmentShadingRateTypeNV'+--     value+--+-- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-shadingRate-parameter#+--     @shadingRate@ /must/ be a valid 'FragmentShadingRateNV' value+--+-- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-combinerOps-parameter#+--     Any given element of @combinerOps@ /must/ be a valid+--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'+--     value+--+-- = See Also+--+-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR',+-- 'FragmentShadingRateNV', 'FragmentShadingRateTypeNV',+-- 'Vulkan.Core10.Enums.StructureType.StructureType'+data PipelineFragmentShadingRateEnumStateCreateInfoNV = PipelineFragmentShadingRateEnumStateCreateInfoNV+  { -- | @shadingRateType@ specifies a 'FragmentShadingRateTypeNV' value+    -- indicating whether fragment shading rates are specified using fragment+    -- sizes or 'FragmentShadingRateNV' enums.+    shadingRateType :: FragmentShadingRateTypeNV+  , -- | @shadingRate@ specifies a 'FragmentShadingRateNV' value indicating the+    -- pipeline fragment shading rate.+    shadingRate :: FragmentShadingRateNV+  , -- | @combinerOps@ specifies+    -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'+    -- values determining how the+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-pipeline pipeline>,+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-primitive primitive>,+    -- and+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment attachment shading rates>+    -- are+    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-combining combined>+    -- for fragments generated by drawing commands using the created pipeline.+    combinerOps :: (FragmentShadingRateCombinerOpKHR, FragmentShadingRateCombinerOpKHR)+  }+  deriving (Typeable, Eq)+#if defined(GENERIC_INSTANCES)+deriving instance Generic (PipelineFragmentShadingRateEnumStateCreateInfoNV)+#endif+deriving instance Show PipelineFragmentShadingRateEnumStateCreateInfoNV++instance ToCStruct PipelineFragmentShadingRateEnumStateCreateInfoNV where+  withCStruct x f = allocaBytesAligned 32 8 $ \p -> pokeCStruct p x (f p)+  pokeCStruct p PipelineFragmentShadingRateEnumStateCreateInfoNV{..} f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr FragmentShadingRateTypeNV)) (shadingRateType)+    poke ((p `plusPtr` 20 :: Ptr FragmentShadingRateNV)) (shadingRate)+    let pCombinerOps' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)))+    case (combinerOps) of+      (e0, e1) -> do+        poke (pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR) (e0)+        poke (pCombinerOps' `plusPtr` 4 :: Ptr FragmentShadingRateCombinerOpKHR) (e1)+    f+  cStructSize = 32+  cStructAlignment = 8+  pokeZeroCStruct p f = do+    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV)+    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)+    poke ((p `plusPtr` 16 :: Ptr FragmentShadingRateTypeNV)) (zero)+    poke ((p `plusPtr` 20 :: Ptr FragmentShadingRateNV)) (zero)+    let pCombinerOps' = lowerArrayPtr ((p `plusPtr` 24 :: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)))+    case ((zero, zero)) of+      (e0, e1) -> do+        poke (pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR) (e0)+        poke (pCombinerOps' `plusPtr` 4 :: Ptr FragmentShadingRateCombinerOpKHR) (e1)+    f++instance FromCStruct PipelineFragmentShadingRateEnumStateCreateInfoNV where+  peekCStruct p = do+    shadingRateType <- peek @FragmentShadingRateTypeNV ((p `plusPtr` 16 :: Ptr FragmentShadingRateTypeNV))+    shadingRate <- peek @FragmentShadingRateNV ((p `plusPtr` 20 :: Ptr FragmentShadingRateNV))+    let pcombinerOps = lowerArrayPtr @FragmentShadingRateCombinerOpKHR ((p `plusPtr` 24 :: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)))+    combinerOps0 <- peek @FragmentShadingRateCombinerOpKHR ((pcombinerOps `advancePtrBytes` 0 :: Ptr FragmentShadingRateCombinerOpKHR))+    combinerOps1 <- peek @FragmentShadingRateCombinerOpKHR ((pcombinerOps `advancePtrBytes` 4 :: Ptr FragmentShadingRateCombinerOpKHR))+    pure $ PipelineFragmentShadingRateEnumStateCreateInfoNV+             shadingRateType shadingRate ((combinerOps0, combinerOps1))++instance Storable PipelineFragmentShadingRateEnumStateCreateInfoNV where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek = peekCStruct+  poke ptr poked = pokeCStruct ptr poked (pure ())++instance Zero PipelineFragmentShadingRateEnumStateCreateInfoNV where+  zero = PipelineFragmentShadingRateEnumStateCreateInfoNV+           zero+           zero+           (zero, zero)+++-- | VkFragmentShadingRateNV - Enumeration with fragment shading rates+--+-- = Description+--+-- To use the shading rates+-- 'FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV',+-- 'FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV',+-- 'FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV', and+-- 'FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV' as a pipeline,+-- primitive, or attachment shading rate, the+-- @supersampleFragmentShadingRates@ feature /must/ be enabled. To use the+-- shading rate 'FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV' as a pipeline,+-- primitive, or attachment shading rate, the+-- @noInvocationFragmentShadingRates@ feature /must/ be enabled.+--+-- = See Also+--+-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV',+-- 'cmdSetFragmentShadingRateEnumNV'+newtype FragmentShadingRateNV = FragmentShadingRateNV Int32+  deriving newtype (Eq, Ord, Storable, Zero)++-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV' specifies a fragment+-- size of 1x1 pixels.+pattern FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = FragmentShadingRateNV 0+-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV' specifies a+-- fragment size of 1x2 pixels.+pattern FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = FragmentShadingRateNV 1+-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV' specifies a+-- fragment size of 2x1 pixels.+pattern FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = FragmentShadingRateNV 4+-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV' specifies a+-- fragment size of 2x2 pixels.+pattern FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = FragmentShadingRateNV 5+-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV' specifies a+-- fragment size of 2x4 pixels.+pattern FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = FragmentShadingRateNV 6+-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV' specifies a+-- fragment size of 4x2 pixels.+pattern FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = FragmentShadingRateNV 9+-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV' specifies a+-- fragment size of 4x4 pixels.+pattern FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = FragmentShadingRateNV 10+-- | 'FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV' specifies a fragment+-- size of 1x1 pixels, with two fragment shader invocations per fragment.+pattern FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = FragmentShadingRateNV 11+-- | 'FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV' specifies a fragment+-- size of 1x1 pixels, with four fragment shader invocations per fragment.+pattern FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = FragmentShadingRateNV 12+-- | 'FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV' specifies a fragment+-- size of 1x1 pixels, with eight fragment shader invocations per fragment.+pattern FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = FragmentShadingRateNV 13+-- | 'FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV' specifies a fragment+-- size of 1x1 pixels, with sixteen fragment shader invocations per+-- fragment.+pattern FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = FragmentShadingRateNV 14+-- | 'FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV' specifies that any portions of+-- a primitive that use that shading rate should be discarded without+-- invoking any fragment shader.+pattern FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV = FragmentShadingRateNV 15+{-# complete FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV,+             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV,+             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV,+             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV,+             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV,+             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV,+             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV,+             FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,+             FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,+             FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV,+             FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV,+             FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV :: FragmentShadingRateNV #-}++instance Show FragmentShadingRateNV where+  showsPrec p = \case+    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV -> showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV"+    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV -> showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV"+    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV -> showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV"+    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV -> showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV"+    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV -> showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV"+    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV -> showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV"+    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV -> showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV"+    FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV -> showString "FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV"+    FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV -> showString "FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV"+    FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV -> showString "FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV"+    FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV -> showString "FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV"+    FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV -> showString "FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV"+    FragmentShadingRateNV x -> showParen (p >= 11) (showString "FragmentShadingRateNV " . showsPrec 11 x)++instance Read FragmentShadingRateNV where+  readPrec = parens (choose [("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV", pure FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV)+                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV", pure FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV)+                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV", pure FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV)+                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV", pure FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV)+                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV", pure FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV)+                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV", pure FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV)+                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV", pure FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV)+                            , ("FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV", pure FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV)+                            , ("FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV", pure FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV)+                            , ("FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV", pure FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV)+                            , ("FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV", pure FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV)+                            , ("FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV", pure FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV)]+                     ++++                     prec 10 (do+                       expectP (Ident "FragmentShadingRateNV")+                       v <- step readPrec+                       pure (FragmentShadingRateNV v)))+++-- | VkFragmentShadingRateTypeNV - Enumeration with fragment shading rate+-- types+--+-- = See Also+--+-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV'+newtype FragmentShadingRateTypeNV = FragmentShadingRateTypeNV Int32+  deriving newtype (Eq, Ord, Storable, Zero)++-- | 'FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV' specifies that a graphics+-- pipeline should obtain its pipeline fragment shading rate and shading+-- rate combiner state from the+-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'+-- structure and that any state specified by the+-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV' structure should be+-- ignored.+pattern FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV = FragmentShadingRateTypeNV 0+-- | 'FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV' specifies that a graphics pipeline+-- should obtain its pipeline fragment shading rate and shading rate+-- combiner state from the+-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV' structure and that+-- any state specified by the+-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'+-- structure should be ignored.+pattern FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV = FragmentShadingRateTypeNV 1+{-# complete FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV,+             FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV :: FragmentShadingRateTypeNV #-}++instance Show FragmentShadingRateTypeNV where+  showsPrec p = \case+    FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV -> showString "FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV"+    FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV -> showString "FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV"+    FragmentShadingRateTypeNV x -> showParen (p >= 11) (showString "FragmentShadingRateTypeNV " . showsPrec 11 x)++instance Read FragmentShadingRateTypeNV where+  readPrec = parens (choose [("FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV", pure FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV)+                            , ("FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV", pure FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV)]+                     ++++                     prec 10 (do+                       expectP (Ident "FragmentShadingRateTypeNV")+                       v <- step readPrec+                       pure (FragmentShadingRateTypeNV v)))+++type NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION = 1++-- No documentation found for TopLevel "VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION"+pattern NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION :: forall a . Integral a => a+pattern NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION = 1+++type NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME = "VK_NV_fragment_shading_rate_enums"++-- No documentation found for TopLevel "VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME"+pattern NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a+pattern NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME = "VK_NV_fragment_shading_rate_enums"+
+ src/Vulkan/Extensions/VK_NV_fragment_shading_rate_enums.hs-boot view
@@ -0,0 +1,36 @@+{-# language CPP #-}+module Vulkan.Extensions.VK_NV_fragment_shading_rate_enums  ( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV+                                                            , PhysicalDeviceFragmentShadingRateEnumsPropertiesNV+                                                            , PipelineFragmentShadingRateEnumStateCreateInfoNV+                                                            , FragmentShadingRateNV+                                                            ) where++import Data.Kind (Type)+import Vulkan.CStruct (FromCStruct)+import Vulkan.CStruct (ToCStruct)+data PhysicalDeviceFragmentShadingRateEnumsFeaturesNV++instance ToCStruct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV+instance Show PhysicalDeviceFragmentShadingRateEnumsFeaturesNV++instance FromCStruct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV+++data PhysicalDeviceFragmentShadingRateEnumsPropertiesNV++instance ToCStruct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV+instance Show PhysicalDeviceFragmentShadingRateEnumsPropertiesNV++instance FromCStruct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV+++data PipelineFragmentShadingRateEnumStateCreateInfoNV++instance ToCStruct PipelineFragmentShadingRateEnumStateCreateInfoNV+instance Show PipelineFragmentShadingRateEnumStateCreateInfoNV++instance FromCStruct PipelineFragmentShadingRateEnumStateCreateInfoNV+++data FragmentShadingRateNV+
src/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs view
@@ -118,7 +118,8 @@ -- -- == Valid Usage ----- -   If @coverageModulationTableEnable@ is+-- -   #VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationTableEnable-01405#+--     If @coverageModulationTableEnable@ is --     'Vulkan.Core10.FundamentalTypes.TRUE', --     @coverageModulationTableCount@ /must/ be equal to the number of --     rasterization samples divided by the number of color samples in the@@ -126,12 +127,15 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineCoverageModulationStateCreateInfoNV-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV' ----- -   @flags@ /must/ be @0@+-- -   #VUID-VkPipelineCoverageModulationStateCreateInfoNV-flags-zerobitmask#+--     @flags@ /must/ be @0@ ----- -   @coverageModulationMode@ /must/ be a valid+-- -   #VUID-VkPipelineCoverageModulationStateCreateInfoNV-coverageModulationMode-parameter#+--     @coverageModulationMode@ /must/ be a valid --     'CoverageModulationModeNV' value -- -- = See Also
src/Vulkan/Extensions/VK_NV_mesh_shader.hs view
@@ -72,7 +72,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdDrawMeshTasksNV-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -81,20 +82,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawMeshTasksNV-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -103,7 +107,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -117,53 +122,58 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdDrawMeshTasksNV-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a --     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set --     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create --     the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02698# For each push constant that+--     is statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to+--     the pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a --     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push --     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02699# Descriptors in each bound+--     descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02700# A valid pipeline /must/ be+--     bound to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02859# There /must/ not have been+--     any calls to dynamic state setting commands for any state not+--     specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object+--     bound to the pipeline bind point used by this command, since that+--     pipeline was bound+--+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -175,21 +185,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -197,7 +209,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -205,46 +217,52 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource+-- -   #VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707# If @commandBuffer@+--     is an unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawMeshTasksNV-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawMeshTasksNV-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawMeshTasksNV-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawMeshTasksNV-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawMeshTasksNV-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawMeshTasksNV-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksNV-sparseImageInt64Atomics-04474# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -253,7 +271,7 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksNV-sparseImageInt64Atomics-04475# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -262,7 +280,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   The current render pass /must/ be+-- -   #VUID-vkCmdDrawMeshTasksNV-renderPass-02684# The current render pass+--     /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible> --     with the @renderPass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure@@ -270,25 +289,32 @@ --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the+-- -   #VUID-vkCmdDrawMeshTasksNV-subpass-02685# The subpass index of the+--     current render pass /must/ be equal to the @subpass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure --     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set+-- -   #VUID-vkCmdDrawMeshTasksNV-None-02686# Every input attachment used+--     by the current subpass /must/ be bound to the pipeline via a+--     descriptor set ----- -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command+-- -   #VUID-vkCmdDrawMeshTasksNV-None-04584# Image subresources used as+--     attachments in the current render pass /must/ not be accessed in any+--     way other than as an attachment by this command, except for cases+--     involving read-only access to depth\/stencil attachments as+--     described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter ----- -   If the draw is recorded in a render pass instance with multiview---     enabled, the maximum instance index /must/ be less than or equal to+-- -   #VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688# If the+--     draw is recorded in a render pass instance with multiview enabled,+--     the maximum instance index /must/ be less than or equal to --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@ ----- -   If the bound graphics pipeline was created with+-- -   #VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689# If the bound+--     graphics pipeline was created with --     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@ --     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass --     has a depth\/stencil attachment, then that attachment /must/ have@@ -296,7 +322,8 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' --     bit set ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-viewportCount-03417# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'@@ -309,7 +336,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-scissorCount-03418# If the bound graphics+--     pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -322,7 +350,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with both the+-- -   #VUID-vkCmdDrawMeshTasksNV-viewportCount-03419# If the bound+--     graphics pipeline state was created with both the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -336,7 +365,8 @@ --     /must/ match the @scissorCount@ parameter of --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-viewportCount-04137# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -347,7 +377,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-viewportCount-04138# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -358,7 +389,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-viewportCount-04139# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -369,7 +401,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-viewportCount-04140# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -380,7 +413,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-VkPipelineVieportCreateInfo-04141# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'@@ -391,7 +425,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-VkPipelineVieportCreateInfo-04142# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'@@ -402,7 +437,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT' --     dynamic state enabled then --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'@@ -415,7 +451,8 @@ --     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ --     state ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports> --     limit is not supported, the bound graphics pipeline was created with --     the@@ -429,21 +466,25 @@ --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' --     /must/ be @1@ ----- -   @taskCount@ /must/ be less than or equal to+-- -   #VUID-vkCmdDrawMeshTasksNV-taskCount-02119# @taskCount@ /must/ be+--     less than or equal to --     'PhysicalDeviceMeshShaderPropertiesNV'::@maxDrawMeshTasksCount@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdDrawMeshTasksNV-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDrawMeshTasksNV-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdDrawMeshTasksNV-renderpass# This command /must/ only be+--     called inside of a render pass instance -- -- == Host Synchronization --@@ -508,7 +549,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -517,20 +559,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -539,7 +584,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -553,23 +599,25 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02697# For each set /n/ that+--     is statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to+--     the pipeline bind point used by this command, a descriptor set+--     /must/ have been bound to /n/ at the same pipeline bind point, with+--     a 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set --     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create --     the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02698# For each push+--     constant that is statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command, a push constant value /must/ have been set for --     the same pipeline bind point, with a@@ -578,28 +626,32 @@ --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02699# Descriptors in each+--     bound descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02700# A valid pipeline+--     /must/ be bound to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02859# There /must/ not have+--     been any calls to dynamic state setting commands for any state not+--     specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object+--     bound to the pipeline bind point used by this command, since that+--     pipeline was bound+--+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -611,21 +663,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -633,7 +687,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -641,46 +695,54 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707# If+--     @commandBuffer@ is an unprotected command buffer, any resource --     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the --     pipeline bind point used by this command /must/ not be a protected --     resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-sparseImageInt64Atomics-04474# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -689,7 +751,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-sparseImageInt64Atomics-04475# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -698,7 +761,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   The current render pass /must/ be+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684# The current+--     render pass /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible> --     with the @renderPass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure@@ -706,25 +770,32 @@ --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685# The subpass index+--     of the current render pass /must/ be equal to the @subpass@ member+--     of the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure --     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-02686# Every input+--     attachment used by the current subpass /must/ be bound to the+--     pipeline via a descriptor set ----- -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-None-04584# Image subresources+--     used as attachments in the current render pass /must/ not be+--     accessed in any way other than as an attachment by this command,+--     except for cases involving read-only access to depth\/stencil+--     attachments as described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter ----- -   If the draw is recorded in a render pass instance with multiview+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688#+--     If the draw is recorded in a render pass instance with multiview --     enabled, the maximum instance index /must/ be less than or equal to --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@ ----- -   If the bound graphics pipeline was created with+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689# If+--     the bound graphics pipeline was created with --     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@ --     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass --     has a depth\/stencil attachment, then that attachment /must/ have@@ -732,7 +803,8 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' --     bit set ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'@@ -745,7 +817,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -758,7 +831,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with both the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419# If the bound+--     graphics pipeline state was created with both the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -772,7 +846,8 @@ --     /must/ match the @scissorCount@ parameter of --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-04137# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -783,7 +858,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-04138# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -794,7 +870,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-04139# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -805,7 +882,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-04140# If the bound+--     graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -816,7 +894,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-VkPipelineVieportCreateInfo-04141#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'@@ -827,7 +906,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-VkPipelineVieportCreateInfo-04142#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'@@ -838,7 +918,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT' --     dynamic state enabled then --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'@@ -851,7 +932,8 @@ --     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ --     state ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports> --     limit is not supported, the bound graphics pipeline was created with --     the@@ -865,53 +947,67 @@ --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' --     /must/ be @1@ ----- -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708# If @buffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @buffer@ /must/ have been created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709# @buffer@ /must/+--     have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   @offset@ /must/ be a multiple of @4@+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-offset-02710# @offset@ /must/ be+--     a multiple of @4@ ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711#+--     @commandBuffer@ /must/ not be a protected command buffer ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02718# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiDrawIndirect multi-draw indirect> --     feature is not enabled, @drawCount@ /must/ be @0@ or @1@ ----- -   @drawCount@ /must/ be less than or equal to+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02719# @drawCount@+--     /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@ ----- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of---     @4@ and /must/ be greater than or equal to+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02146# If @drawCount@+--     is greater than @1@, @stride@ /must/ be a multiple of @4@ and /must/+--     be greater than or equal to --     @sizeof@('DrawMeshTasksIndirectCommandNV') ----- -   If @drawCount@ is equal to @1@, (@offset@ ++-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02156# If @drawCount@+--     is equal to @1@, (@offset@ + --     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or --     equal to the size of @buffer@ ----- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +---     @offset@ + @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be---     less than or equal to the size of @buffer@+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157# If @drawCount@+--     is greater than @1@, (@stride@ × (@drawCount@ - 1) + @offset@ ++--     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or+--     equal to the size of @buffer@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-buffer-parameter# @buffer@ /must/+--     be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-renderpass# This command /must/+--     only be called inside of a render pass instance ----- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-vkCmdDrawMeshTasksIndirectNV-commonparent# Both of @buffer@,+--     and @commandBuffer@ /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization --@@ -978,7 +1074,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -987,20 +1084,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -1009,7 +1109,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -1023,23 +1124,25 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a---     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set---     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create---     the current 'Vulkan.Core10.Handles.Pipeline', as described in+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697# For each set /n/+--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'+--     bound to the pipeline bind point used by this command, a descriptor+--     set /must/ have been bound to /n/ at the same pipeline bind point,+--     with a 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for+--     set /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to+--     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698# For each push+--     constant that is statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command, a push constant value /must/ have been set for --     the same pipeline bind point, with a@@ -1048,28 +1151,32 @@ --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699# Descriptors in+--     each bound descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700# A valid pipeline+--     /must/ be bound to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859# There /must/ not+--     have been any calls to dynamic state setting commands for any state+--     not specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline'+--     object bound to the pipeline bind point used by this command, since+--     that pipeline was bound+--+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -1081,21 +1188,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -1103,7 +1212,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -1111,46 +1220,54 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707# If+--     @commandBuffer@ is an unprotected command buffer, any resource --     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the --     pipeline bind point used by this command /must/ not be a protected --     resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-sparseImageInt64Atomics-04474#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -1159,7 +1276,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-sparseImageInt64Atomics-04475#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -1168,7 +1286,8 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   The current render pass /must/ be+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684# The+--     current render pass /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible> --     with the @renderPass@ member of the --     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure@@ -1176,25 +1295,32 @@ --     to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   The subpass index of the current render pass /must/ be equal to the---     @subpass@ member of the---     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure---     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound---     to+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685# The subpass+--     index of the current render pass /must/ be equal to the @subpass@+--     member of the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'+--     structure specified when creating the+--     'Vulkan.Core10.Handles.Pipeline' bound to --     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS' ----- -   Every input attachment used by the current subpass /must/ be bound---     to the pipeline via a descriptor set+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686# Every input+--     attachment used by the current subpass /must/ be bound to the+--     pipeline via a descriptor set ----- -   Image subresources used as attachments in the current render pass---     /must/ not be accessed in any way other than as an attachment by---     this command+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584# Image+--     subresources used as attachments in the current render pass /must/+--     not be accessed in any way other than as an attachment by this+--     command, except for cases involving read-only access to+--     depth\/stencil attachments as described in the+--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-attachment-nonattachment Render Pass>+--     chapter ----- -   If the draw is recorded in a render pass instance with multiview+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688#+--     If the draw is recorded in a render pass instance with multiview --     enabled, the maximum instance index /must/ be less than or equal to --     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@ ----- -   If the bound graphics pipeline was created with+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689#+--     If the bound graphics pipeline was created with --     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@ --     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass --     has a depth\/stencil attachment, then that attachment /must/ have@@ -1202,7 +1328,8 @@ --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT' --     bit set ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT'@@ -1215,7 +1342,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -1228,7 +1356,8 @@ --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@ --     of the pipeline ----- -   If the bound graphics pipeline state was created with both the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419# If the+--     bound graphics pipeline state was created with both the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT'@@ -1242,7 +1371,8 @@ --     /must/ match the @scissorCount@ parameter of --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-04137# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -1253,7 +1383,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-04138# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'@@ -1264,7 +1395,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-04139# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled, but not the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -1275,7 +1407,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-04140# If the+--     bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     and --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'@@ -1286,7 +1419,8 @@ --     the last call to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-VkPipelineVieportCreateInfo-04141#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'@@ -1297,7 +1431,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-VkPipelineVieportCreateInfo-04142#+--     If the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT' --     dynamic state enabled and an instance of --     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'@@ -1308,7 +1443,8 @@ --     to --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' ----- -   If the bound graphics pipeline state was created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420# If+--     the bound graphics pipeline state was created with the --     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT' --     dynamic state enabled then --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'@@ -1321,7 +1457,8 @@ --     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@ --     state ----- -   If the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports> --     limit is not supported, the bound graphics pipeline was created with --     the@@ -1335,74 +1472,93 @@ --     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' --     /must/ be @1@ ----- -   If @buffer@ is non-sparse then it /must/ be bound completely and---     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708# If @buffer@ is+--     non-sparse then it /must/ be bound completely and contiguously to a+--     single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @buffer@ /must/ have been created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709# @buffer@+--     /must/ have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   @offset@ /must/ be a multiple of @4@+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-offset-02710# @offset@+--     /must/ be a multiple of @4@ ----- -   @commandBuffer@ /must/ not be a protected command buffer+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711#+--     @commandBuffer@ /must/ not be a protected command buffer ----- -   If @countBuffer@ is non-sparse then it /must/ be bound completely---     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'---     object+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714# If+--     @countBuffer@ is non-sparse then it /must/ be bound completely and+--     contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @countBuffer@ /must/ have been created with the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715#+--     @countBuffer@ /must/ have been created with the --     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT' --     bit set ----- -   @countBufferOffset@ /must/ be a multiple of @4@+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-countBufferOffset-02716#+--     @countBufferOffset@ /must/ be a multiple of @4@ ----- -   The count stored in @countBuffer@ /must/ be less than or equal to+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02717# The count+--     stored in @countBuffer@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxDrawIndirectCount@ ----- -   (@countBufferOffset@ + @sizeof@(uint32_t)) /must/ be less than or+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-countBufferOffset-04129#+--     (@countBufferOffset@ + @sizeof@(uint32_t)) /must/ be less than or --     equal to the size of @countBuffer@ ----- -   If+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04445# If --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-drawIndirectCount drawIndirectCount> --     is not enabled this function /must/ not be used ----- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or---     equal to @sizeof@('DrawMeshTasksIndirectCommandNV')+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182# @stride@+--     /must/ be a multiple of @4@ and /must/ be greater than or equal to+--     @sizeof@('DrawMeshTasksIndirectCommandNV') ----- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183# If+--     @maxDrawCount@ is greater than or equal to @1@, (@stride@ × --     (@maxDrawCount@ - 1) + @offset@ + --     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or --     equal to the size of @buffer@ ----- -   If the count stored in @countBuffer@ is equal to @1@, (@offset@ ++-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02191# If the+--     count stored in @countBuffer@ is equal to @1@, (@offset@ + --     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or --     equal to the size of @buffer@ ----- -   If the count stored in @countBuffer@ is greater than @1@, (@stride@---     × (@drawCount@ - 1) + @offset@ ++-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02192# If the+--     count stored in @countBuffer@ is greater than @1@, (@stride@ ×+--     (@drawCount@ - 1) + @offset@ + --     @sizeof@('DrawMeshTasksIndirectCommandNV')) /must/ be less than or --     equal to the size of @buffer@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @buffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-parameter# @buffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @countBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-parameter#+--     @countBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' --     handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   This command /must/ only be called inside of a render pass instance+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass# This command+--     /must/ only be called inside of a render pass instance ----- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /must/ have---     been created, allocated, or retrieved from the same+-- -   #VUID-vkCmdDrawMeshTasksIndirectCountNV-commonparent# Each of+--     @buffer@, @commandBuffer@, and @countBuffer@ /must/ have been+--     created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization@@ -1476,9 +1632,11 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceMeshShaderFeaturesNV = PhysicalDeviceMeshShaderFeaturesNV-  { -- | @taskShader@ indicates whether the task shader stage is supported.+  { -- | #features-taskShader# @taskShader@ indicates whether the task shader+    -- stage is supported.     taskShader :: Bool-  , -- | @meshShader@ indicates whether the mesh shader stage is supported.+  , -- | #features-meshShader# @meshShader@ indicates whether the mesh shader+    -- stage is supported.     meshShader :: Bool   }   deriving (Typeable, Eq)@@ -1732,7 +1890,8 @@   { -- | @taskCount@ is the number of local workgroups to dispatch in the X     -- dimension. Y and Z dimension are implicitly set to one.     ---    -- @taskCount@ /must/ be less than or equal to+    -- #VUID-VkDrawMeshTasksIndirectCommandNV-taskCount-02175# @taskCount@+    -- /must/ be less than or equal to     -- 'PhysicalDeviceMeshShaderPropertiesNV'::@maxDrawMeshTasksCount@     taskCount :: Word32   , -- | @firstTask@ is the X component of the first workgroup ID.
src/Vulkan/Extensions/VK_NV_ray_tracing.hs view
@@ -358,21 +358,25 @@                    . (MonadIO io)                   => -- | @device@ is the logical device containing the ray tracing pipeline.                      ---                     -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                     -- #VUID-vkCompileDeferredNV-device-parameter# @device@ /must/ be a valid+                     -- 'Vulkan.Core10.Handles.Device' handle                      Device                   -> -- | @pipeline@ is the ray tracing pipeline object containing the shaders.                      ---                     -- @pipeline@ /must/ have been created with+                     -- #VUID-vkCompileDeferredNV-pipeline-02237# @pipeline@ /must/ have been+                     -- created with                      -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEFER_COMPILE_BIT_NV'                      ---                     -- @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle+                     -- #VUID-vkCompileDeferredNV-pipeline-parameter# @pipeline@ /must/ be a+                     -- valid 'Vulkan.Core10.Handles.Pipeline' handle                      ---                     -- @pipeline@ /must/ have been created, allocated, or retrieved from-                     -- @device@+                     -- #VUID-vkCompileDeferredNV-pipeline-parent# @pipeline@ /must/ have been+                     -- created, allocated, or retrieved from @device@                      Pipeline                   -> -- | @shader@ is the index of the shader to compile.                      ---                     -- @shader@ /must/ not have been called as a deferred compile before+                     -- #VUID-vkCompileDeferredNV-shader-02238# @shader@ /must/ not have been+                     -- called as a deferred compile before                      ("shader" ::: Word32)                   -> io () compileDeferredNV device pipeline shader = liftIO $ do@@ -408,16 +412,20 @@ -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateAccelerationStructureNV-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   @pCreateInfo@ /must/ be a valid pointer to a valid+-- -   #VUID-vkCreateAccelerationStructureNV-pCreateInfo-parameter#+--     @pCreateInfo@ /must/ be a valid pointer to a valid --     'AccelerationStructureCreateInfoNV' structure ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateAccelerationStructureNV-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pAccelerationStructure@ /must/ be a valid pointer to a+-- -   #VUID-vkCreateAccelerationStructureNV-pAccelerationStructure-parameter#+--     @pAccelerationStructure@ /must/ be a valid pointer to a --     'AccelerationStructureNV' handle -- -- == Return Codes@@ -486,11 +494,13 @@                                              => -- | @device@ is the logical device on which the acceleration structure was                                                 -- created.                                                 --+                                                -- #VUID-vkGetAccelerationStructureMemoryRequirementsNV-device-parameter#                                                 -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                                 Device                                              -> -- | @pInfo@ specifies the acceleration structure to get memory requirements                                                 -- for.                                                 --+                                                -- #VUID-vkGetAccelerationStructureMemoryRequirementsNV-pInfo-parameter#                                                 -- @pInfo@ /must/ be a valid pointer to a valid                                                 -- 'AccelerationStructureMemoryRequirementsInfoNV' structure                                                 AccelerationStructureMemoryRequirementsInfoNV@@ -518,40 +528,49 @@ -- -- == Valid Usage ----- -   @mode@ /must/ be+-- -   #VUID-vkCmdCopyAccelerationStructureNV-mode-03410# @mode@ /must/ be --     'Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' --     or --     'Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR' ----- -   @src@ /must/ have been built with+-- -   #VUID-vkCmdCopyAccelerationStructureNV-src-03411# @src@ /must/ have+--     been built with --     'Vulkan.Extensions.VK_KHR_ray_tracing.BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR' --     if @mode@ is --     'Vulkan.Extensions.VK_KHR_ray_tracing.COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @dst@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+-- -   #VUID-vkCmdCopyAccelerationStructureNV-dst-parameter# @dst@ /must/+--     be a valid 'Vulkan.Extensions.Handles.AccelerationStructureKHR'+--     handle ----- -   @src@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+-- -   #VUID-vkCmdCopyAccelerationStructureNV-src-parameter# @src@ /must/+--     be a valid 'Vulkan.Extensions.Handles.AccelerationStructureKHR'+--     handle ----- -   @mode@ /must/ be a valid+-- -   #VUID-vkCmdCopyAccelerationStructureNV-mode-parameter# @mode@ /must/+--     be a valid --     'Vulkan.Extensions.VK_KHR_ray_tracing.CopyAccelerationStructureModeKHR' --     value ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdCopyAccelerationStructureNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support compute operations ----- -   This command /must/ only be called outside of a render pass instance+-- -   #VUID-vkCmdCopyAccelerationStructureNV-renderpass# This command+--     /must/ only be called outside of a render pass instance ----- -   Each of @commandBuffer@, @dst@, and @src@ /must/ have been created,+-- -   #VUID-vkCmdCopyAccelerationStructureNV-commonparent# Each of+--     @commandBuffer@, @dst@, and @src@ /must/ have been created, --     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == Host Synchronization@@ -625,11 +644,12 @@ -- -- == Valid Usage ----- -   @geometryCount@ /must/ be less than or equal to+-- -   #VUID-vkCmdBuildAccelerationStructureNV-geometryCount-02241#+--     @geometryCount@ /must/ be less than or equal to --     'PhysicalDeviceRayTracingPropertiesNV'::@maxGeometryCount@ ----- -   @dst@ /must/ have been created with compatible---     'AccelerationStructureInfoNV' where+-- -   #VUID-vkCmdBuildAccelerationStructureNV-dst-02488# @dst@ /must/ have+--     been created with compatible 'AccelerationStructureInfoNV' where --     'AccelerationStructureInfoNV'::@type@ and --     'AccelerationStructureInfoNV'::@flags@ are identical, --     'AccelerationStructureInfoNV'::@instanceCount@ and@@ -638,17 +658,19 @@ --     'AccelerationStructureInfoNV'::@pGeometries@ for @dst@ has greater --     than or equal to the number of vertices, indices, and AABBs ----- -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', @src@ /must/---     not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'+-- -   #VUID-vkCmdBuildAccelerationStructureNV-update-02489# If @update@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', @src@ /must/ not be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', @src@ /must/---     have been built before with---     'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV' set in---     'AccelerationStructureInfoNV'::@flags@+-- -   #VUID-vkCmdBuildAccelerationStructureNV-update-02490# If @update@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', @src@ /must/ have been built+--     before with 'BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV' set+--     in 'AccelerationStructureInfoNV'::@flags@ ----- -   If @update@ is 'Vulkan.Core10.FundamentalTypes.FALSE', the @size@---     member of the 'Vulkan.Core10.MemoryManagement.MemoryRequirements'---     structure returned from a call to+-- -   #VUID-vkCmdBuildAccelerationStructureNV-update-02491# If @update@ is+--     'Vulkan.Core10.FundamentalTypes.FALSE', the @size@ member of the+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure+--     returned from a call to --     'getAccelerationStructureMemoryRequirementsNV' with --     'AccelerationStructureMemoryRequirementsInfoNV'::@accelerationStructure@ --     set to @dst@ and@@ -657,9 +679,10 @@ --     /must/ be less than or equal to the size of @scratch@ minus --     @scratchOffset@ ----- -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', the @size@---     member of the 'Vulkan.Core10.MemoryManagement.MemoryRequirements'---     structure returned from a call to+-- -   #VUID-vkCmdBuildAccelerationStructureNV-update-02492# If @update@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @size@ member of the+--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure+--     returned from a call to --     'getAccelerationStructureMemoryRequirementsNV' with --     'AccelerationStructureMemoryRequirementsInfoNV'::@accelerationStructure@ --     set to @dst@ and@@ -668,56 +691,70 @@ --     /must/ be less than or equal to the size of @scratch@ minus --     @scratchOffset@ ----- -   @scratch@ /must/ have been created with---     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag+-- -   #VUID-vkCmdBuildAccelerationStructureNV-scratch-03522# @scratch@+--     /must/ have been created with 'BUFFER_USAGE_RAY_TRACING_BIT_NV'+--     usage flag ----- -   If @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkCmdBuildAccelerationStructureNV-instanceData-03523# If+--     @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @instanceData@ /must/ have been created with --     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag ----- -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', then objects---     that were previously active /must/ not be made inactive as per+-- -   #VUID-vkCmdBuildAccelerationStructureNV-update-03524# If @update@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', then objects that were+--     previously active /must/ not be made inactive as per --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims> ----- -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', then objects---     that were previously inactive /must/ not be made active as per+-- -   #VUID-vkCmdBuildAccelerationStructureNV-update-03525# If @update@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', then objects that were+--     previously inactive /must/ not be made active as per --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#acceleration-structure-inactive-prims> ----- -   If @update@ is 'Vulkan.Core10.FundamentalTypes.TRUE', the @src@ and---     @dst@ objects /must/ either be the same object or not have any+-- -   #VUID-vkCmdBuildAccelerationStructureNV-update-03526# If @update@ is+--     'Vulkan.Core10.FundamentalTypes.TRUE', the @src@ and @dst@ objects+--     /must/ either be the same object or not have any --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-memory-aliasing memory aliasing> -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pInfo@ /must/ be a valid pointer to a valid---     'AccelerationStructureInfoNV' structure+-- -   #VUID-vkCmdBuildAccelerationStructureNV-pInfo-parameter# @pInfo@+--     /must/ be a valid pointer to a valid 'AccelerationStructureInfoNV'+--     structure ----- -   If @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkCmdBuildAccelerationStructureNV-instanceData-parameter# If+--     @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @instanceData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' --     handle ----- -   @dst@ /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+-- -   #VUID-vkCmdBuildAccelerationStructureNV-dst-parameter# @dst@ /must/+--     be a valid 'Vulkan.Extensions.Handles.AccelerationStructureKHR'+--     handle ----- -   If @src@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @src@---     /must/ be a valid---     'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle+-- -   #VUID-vkCmdBuildAccelerationStructureNV-src-parameter# If @src@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @src@ /must/ be a+--     valid 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle ----- -   @scratch@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-vkCmdBuildAccelerationStructureNV-scratch-parameter# @scratch@+--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBuildAccelerationStructureNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support compute operations ----- -   This command /must/ only be called outside of a render pass instance+-- -   #VUID-vkCmdBuildAccelerationStructureNV-renderpass# This command+--     /must/ only be called outside of a render pass instance ----- -   Each of @commandBuffer@, @dst@, @instanceData@, @scratch@, and @src@---     that are valid handles of non-ignored parameters /must/ have been+-- -   #VUID-vkCmdBuildAccelerationStructureNV-commonparent# Each of+--     @commandBuffer@, @dst@, @instanceData@, @scratch@, and @src@ that+--     are valid handles of non-ignored parameters /must/ have been --     created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' --@@ -803,7 +840,8 @@ -- -- == Valid Usage ----- -   If a 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or+-- -   #VUID-vkCmdTraceRaysNV-magFilter-04553# If a+--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or --     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and --     @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' is --     used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of@@ -812,20 +850,23 @@ --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using atomic+-- -   #VUID-vkCmdTraceRaysNV-None-02691# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic --     operations as a result of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT' ----- -   If a 'Vulkan.Core10.Handles.ImageView' is sampled with+-- -   #VUID-vkCmdTraceRaysNV-None-02692# If a+--     'Vulkan.Core10.Handles.ImageView' is sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command, then the image view’s --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> --     /must/ contain --     'Vulkan.Extensions.VK_EXT_filter_cubic.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdTraceRaysNV-filterCubic-02694# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' as a result --     of this command /must/ have a --     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that@@ -834,7 +875,8 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.ImageView' being sampled with+-- -   #VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695# Any+--     'Vulkan.Core10.Handles.ImageView' being sampled with --     'Vulkan.Extensions.VK_EXT_filter_cubic.FILTER_CUBIC_EXT' with a --     reduction mode of either --     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'@@ -848,53 +890,58 @@ --     returned by --     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2' ----- -   Any 'Vulkan.Core10.Handles.Image' created with a+-- -   #VUID-vkCmdTraceRaysNV-flags-02696# Any+--     'Vulkan.Core10.Handles.Image' created with a --     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV' --     sampled as a result of this command /must/ only be sampled using a --     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of --     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE' ----- -   For each set /n/ that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a descriptor set /must/ have been bound to /n/---     at the same pipeline bind point, with a+-- -   #VUID-vkCmdTraceRaysNV-None-02697# For each set /n/ that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a descriptor set /must/+--     have been bound to /n/ at the same pipeline bind point, with a --     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set --     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create --     the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   For each push constant that is statically used by the---     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point---     used by this command, a push constant value /must/ have been set for---     the same pipeline bind point, with a+-- -   #VUID-vkCmdTraceRaysNV-None-02698# For each push constant that is+--     statically used by the 'Vulkan.Core10.Handles.Pipeline' bound to the+--     pipeline bind point used by this command, a push constant value+--     /must/ have been set for the same pipeline bind point, with a --     'Vulkan.Core10.Handles.PipelineLayout' that is compatible for push --     constants, with the 'Vulkan.Core10.Handles.PipelineLayout' used to --     create the current 'Vulkan.Core10.Handles.Pipeline', as described in --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???> ----- -   Descriptors in each bound descriptor set, specified via+-- -   #VUID-vkCmdTraceRaysNV-None-02699# Descriptors in each bound+--     descriptor set, specified via --     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ --     be valid if they are statically used by the --     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point --     used by this command ----- -   A valid pipeline /must/ be bound to the pipeline bind point used by---     this command------ -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command requires any dynamic state, that---     state /must/ have been set for @commandBuffer@, and done so after---     any previously bound pipeline with the corresponding state not---     specified as dynamic+-- -   #VUID-vkCmdTraceRaysNV-None-02700# A valid pipeline /must/ be bound+--     to the pipeline bind point used by this command ----- -   There /must/ not have been any calls to dynamic state setting---     commands for any state not specified as dynamic in the+-- -   #VUID-vkCmdTraceRaysNV-commandBuffer-02701# If the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind---     point used by this command, since that pipeline was bound+--     point used by this command requires any dynamic state, that state+--     /must/ have been set for @commandBuffer@, and done so after any+--     previously bound pipeline with the corresponding state not specified+--     as dynamic ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdTraceRaysNV-None-02859# There /must/ not have been any+--     calls to dynamic state setting commands for any state not specified+--     as dynamic in the 'Vulkan.Core10.Handles.Pipeline' object bound to+--     the pipeline bind point used by this command, since that pipeline+--     was bound+--+-- -   #VUID-vkCmdTraceRaysNV-None-02702# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used to sample from any --     'Vulkan.Core10.Handles.Image' with a@@ -906,21 +953,23 @@ --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in --     any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdTraceRaysNV-None-02703# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions with --     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage ----- -   If the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline---     bind point used by this command accesses a+-- -   #VUID-vkCmdTraceRaysNV-None-02704# If the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command accesses a --     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized --     coordinates, that sampler /must/ not be used with any of the SPIR-V --     @OpImageSample*@ or @OpImageSparseSample*@ instructions that --     includes a LOD bias or any offset values, in any shader stage ----- -   If the+-- -   #VUID-vkCmdTraceRaysNV-None-02705# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -928,7 +977,7 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If the+-- -   #VUID-vkCmdTraceRaysNV-None-02706# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robust buffer access> --     feature is not enabled, and if the 'Vulkan.Core10.Handles.Pipeline' --     object bound to the pipeline bind point used by this command@@ -936,46 +985,52 @@ --     the range of the buffer as specified in the descriptor set bound to --     the same pipeline bind point ----- -   If @commandBuffer@ is an unprotected command buffer, any resource---     accessed by the 'Vulkan.Core10.Handles.Pipeline' object bound to the---     pipeline bind point used by this command /must/ not be a protected---     resource+-- -   #VUID-vkCmdTraceRaysNV-commandBuffer-02707# If @commandBuffer@ is an+--     unprotected command buffer, any resource accessed by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be a protected resource ----- -   If a 'Vulkan.Core10.Handles.ImageView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdTraceRaysNV-None-04115# If a+--     'Vulkan.Core10.Handles.ImageView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.BufferView' is accessed using---     @OpImageWrite@ as a result of this command, then the @Type@ of the---     @Texel@ operand of that instruction /must/ have at least as many---     components as the image view’s format.+-- -   #VUID-vkCmdTraceRaysNV-OpImageWrite-04469# If a+--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@+--     as a result of this command, then the @Type@ of the @Texel@ operand+--     of that instruction /must/ have at least as many components as the+--     image view’s format. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdTraceRaysNV-SampledType-04470# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.ImageView' with a+-- -   #VUID-vkCmdTraceRaysNV-SampledType-04471# If a+--     'Vulkan.Core10.Handles.ImageView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdTraceRaysNV-SampledType-04472# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit channel width --     is accessed as a result of this command, the @SampledType@ of the --     @OpTypeImage@ operand of that instruction /must/ have a @Width@ of --     64. ----- -   If a 'Vulkan.Core10.Handles.BufferView' with a+-- -   #VUID-vkCmdTraceRaysNV-SampledType-04473# If a+--     'Vulkan.Core10.Handles.BufferView' with a --     'Vulkan.Core10.Enums.Format.Format' that has a channel width less --     than 64-bit is accessed as a result of this command, the --     @SampledType@ of the @OpTypeImage@ operand of that instruction --     /must/ have a @Width@ of 32. ----- -   If the+-- -   #VUID-vkCmdTraceRaysNV-sparseImageInt64Atomics-04474# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects --     created with the@@ -984,7 +1039,7 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   If the+-- -   #VUID-vkCmdTraceRaysNV-sparseImageInt64Atomics-04475# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics> --     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects --     created with the@@ -993,124 +1048,156 @@ --     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this --     command. ----- -   Any shader group handle referenced by this call /must/ have been---     queried from the currently bound ray tracing shader pipeline+-- -   #VUID-vkCmdTraceRaysNV-None-03429# Any shader group handle+--     referenced by this call /must/ have been queried from the currently+--     bound ray tracing shader pipeline ----- -   This command /must/ not cause a shader call instruction to be---     executed from a shader invocation with a+-- -   #VUID-vkCmdTraceRaysNV-maxRecursionDepth-03430# This command /must/+--     not cause a shader call instruction to be executed from a shader+--     invocation with a --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#ray-tracing-recursion-depth recursion depth> --     greater than the value of @maxRecursionDepth@ used to create the --     bound ray tracing pipeline ----- -   If @commandBuffer@ is a protected command buffer, any resource---     written to by the 'Vulkan.Core10.Handles.Pipeline' object bound to---     the pipeline bind point used by this command /must/ not be an---     unprotected resource+-- -   #VUID-vkCmdTraceRaysNV-commandBuffer-02712# If @commandBuffer@ is a+--     protected command buffer, any resource written to by the+--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind+--     point used by this command /must/ not be an unprotected resource ----- -   If @commandBuffer@ is a protected command buffer, pipeline stages---     other than the framebuffer-space and compute stages in the+-- -   #VUID-vkCmdTraceRaysNV-commandBuffer-02713# If @commandBuffer@ is a+--     protected command buffer, pipeline stages other than the+--     framebuffer-space and compute stages in the --     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind --     point /must/ not write to any resource ----- -   If @raygenShaderBindingTableBuffer@ is non-sparse then it /must/ be+-- -   #VUID-vkCmdTraceRaysNV-raygenShaderBindingTableBuffer-04042# If+--     @raygenShaderBindingTableBuffer@ is non-sparse then it /must/ be --     bound completely and contiguously to a single --     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @raygenShaderBindingOffset@ /must/ be less than the size of+-- -   #VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455#+--     @raygenShaderBindingOffset@ /must/ be less than the size of --     @raygenShaderBindingTableBuffer@ ----- -   @raygenShaderBindingOffset@ /must/ be a multiple of+-- -   #VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02456#+--     @raygenShaderBindingOffset@ /must/ be a multiple of --     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupBaseAlignment@ ----- -   If @missShaderBindingTableBuffer@ is non-sparse then it /must/ be---     bound completely and contiguously to a single+-- -   #VUID-vkCmdTraceRaysNV-missShaderBindingTableBuffer-04043# If+--     @missShaderBindingTableBuffer@ is non-sparse then it /must/ be bound+--     completely and contiguously to a single --     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @missShaderBindingOffset@ /must/ be less than the size of+-- -   #VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457#+--     @missShaderBindingOffset@ /must/ be less than the size of --     @missShaderBindingTableBuffer@ ----- -   @missShaderBindingOffset@ /must/ be a multiple of+-- -   #VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02458#+--     @missShaderBindingOffset@ /must/ be a multiple of --     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupBaseAlignment@ ----- -   If @hitShaderBindingTableBuffer@ is non-sparse then it /must/ be---     bound completely and contiguously to a single+-- -   #VUID-vkCmdTraceRaysNV-hitShaderBindingTableBuffer-04044# If+--     @hitShaderBindingTableBuffer@ is non-sparse then it /must/ be bound+--     completely and contiguously to a single --     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @hitShaderBindingOffset@ /must/ be less than the size of+-- -   #VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459#+--     @hitShaderBindingOffset@ /must/ be less than the size of --     @hitShaderBindingTableBuffer@ ----- -   @hitShaderBindingOffset@ /must/ be a multiple of+-- -   #VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02460#+--     @hitShaderBindingOffset@ /must/ be a multiple of --     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupBaseAlignment@ ----- -   If @callableShaderBindingTableBuffer@ is non-sparse then it /must/---     be bound completely and contiguously to a single+-- -   #VUID-vkCmdTraceRaysNV-callableShaderBindingTableBuffer-04045# If+--     @callableShaderBindingTableBuffer@ is non-sparse then it /must/ be+--     bound completely and contiguously to a single --     'Vulkan.Core10.Handles.DeviceMemory' object ----- -   @callableShaderBindingOffset@ /must/ be less than the size of+-- -   #VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461#+--     @callableShaderBindingOffset@ /must/ be less than the size of --     @callableShaderBindingTableBuffer@ ----- -   @callableShaderBindingOffset@ /must/ be a multiple of+-- -   #VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02462#+--     @callableShaderBindingOffset@ /must/ be a multiple of --     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupBaseAlignment@ ----- -   @missShaderBindingStride@ /must/ be a multiple of+-- -   #VUID-vkCmdTraceRaysNV-missShaderBindingStride-02463#+--     @missShaderBindingStride@ /must/ be a multiple of --     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupHandleSize@ ----- -   @hitShaderBindingStride@ /must/ be a multiple of+-- -   #VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02464#+--     @hitShaderBindingStride@ /must/ be a multiple of --     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupHandleSize@ ----- -   @callableShaderBindingStride@ /must/ be a multiple of+-- -   #VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02465#+--     @callableShaderBindingStride@ /must/ be a multiple of --     'PhysicalDeviceRayTracingPropertiesNV'::@shaderGroupHandleSize@ ----- -   @missShaderBindingStride@ /must/ be less than or equal to+-- -   #VUID-vkCmdTraceRaysNV-missShaderBindingStride-02466#+--     @missShaderBindingStride@ /must/ be less than or equal to --     'PhysicalDeviceRayTracingPropertiesNV'::@maxShaderGroupStride@ ----- -   @hitShaderBindingStride@ /must/ be less than or equal to+-- -   #VUID-vkCmdTraceRaysNV-hitShaderBindingStride-02467#+--     @hitShaderBindingStride@ /must/ be less than or equal to --     'PhysicalDeviceRayTracingPropertiesNV'::@maxShaderGroupStride@ ----- -   @callableShaderBindingStride@ /must/ be less than or equal to+-- -   #VUID-vkCmdTraceRaysNV-callableShaderBindingStride-02468#+--     @callableShaderBindingStride@ /must/ be less than or equal to --     'PhysicalDeviceRayTracingPropertiesNV'::@maxShaderGroupStride@ ----- -   @width@ /must/ be less than or equal to+-- -   #VUID-vkCmdTraceRaysNV-width-02469# @width@ /must/ be less than or+--     equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[0] ----- -   @height@ /must/ be less than or equal to+-- -   #VUID-vkCmdTraceRaysNV-height-02470# @height@ /must/ be less than or+--     equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[1] ----- -   @depth@ /must/ be less than or equal to+-- -   #VUID-vkCmdTraceRaysNV-depth-02471# @depth@ /must/ be less than or+--     equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxComputeWorkGroupCount@[2] -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid---     'Vulkan.Core10.Handles.CommandBuffer' handle+-- -   #VUID-vkCmdTraceRaysNV-commandBuffer-parameter# @commandBuffer@+--     /must/ be a valid 'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @raygenShaderBindingTableBuffer@ /must/ be a valid+-- -   #VUID-vkCmdTraceRaysNV-raygenShaderBindingTableBuffer-parameter#+--     @raygenShaderBindingTableBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.Buffer' handle ----- -   If @missShaderBindingTableBuffer@ is not+-- -   #VUID-vkCmdTraceRaysNV-missShaderBindingTableBuffer-parameter# If+--     @missShaderBindingTableBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @missShaderBindingTableBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.Buffer' handle ----- -   If @hitShaderBindingTableBuffer@ is not+-- -   #VUID-vkCmdTraceRaysNV-hitShaderBindingTableBuffer-parameter# If+--     @hitShaderBindingTableBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @hitShaderBindingTableBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.Buffer' handle ----- -   If @callableShaderBindingTableBuffer@ is not+-- -   #VUID-vkCmdTraceRaysNV-callableShaderBindingTableBuffer-parameter#+--     If @callableShaderBindingTableBuffer@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @callableShaderBindingTableBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.Buffer' handle ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdTraceRaysNV-commandBuffer-recording# @commandBuffer@+--     /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support compute operations ----- -   This command /must/ only be called outside of a render pass instance+-- -   #VUID-vkCmdTraceRaysNV-renderpass# This command /must/ only be+--     called outside of a render pass instance ----- -   Each of @callableShaderBindingTableBuffer@, @commandBuffer@,+-- -   #VUID-vkCmdTraceRaysNV-commonparent# Each of+--     @callableShaderBindingTableBuffer@, @commandBuffer@, --     @hitShaderBindingTableBuffer@, @missShaderBindingTableBuffer@, and --     @raygenShaderBindingTableBuffer@ that are valid handles of --     non-ignored parameters /must/ have been created, allocated, or@@ -1226,31 +1313,38 @@                                   . (MonadIO io)                                  => -- | @device@ is the logical device that owns the acceleration structures.                                     ---                                    -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+                                    -- #VUID-vkGetAccelerationStructureHandleNV-device-parameter# @device@+                                    -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle                                     Device                                  -> -- | @accelerationStructure@ is the acceleration structure.                                     --+                                    -- #VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-02787#                                     -- @accelerationStructure@ /must/ be bound completely and contiguously to a                                     -- single 'Vulkan.Core10.Handles.DeviceMemory' object via                                     -- 'Vulkan.Extensions.VK_KHR_ray_tracing.bindAccelerationStructureMemoryKHR'                                     --+                                    -- #VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-parameter#                                     -- @accelerationStructure@ /must/ be a valid                                     -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' handle                                     --+                                    -- #VUID-vkGetAccelerationStructureHandleNV-accelerationStructure-parent#                                     -- @accelerationStructure@ /must/ have been created, allocated, or                                     -- retrieved from @device@                                     AccelerationStructureKHR                                  -> -- | @dataSize@ is the size in bytes of the buffer pointed to by @pData@.                                     ---                                    -- @dataSize@ /must/ be large enough to contain the result of the query, as-                                    -- described above+                                    -- #VUID-vkGetAccelerationStructureHandleNV-dataSize-02240# @dataSize@+                                    -- /must/ be large enough to contain the result of the query, as described+                                    -- above                                     --+                                    -- #VUID-vkGetAccelerationStructureHandleNV-dataSize-arraylength#                                     -- @dataSize@ /must/ be greater than @0@                                     ("dataSize" ::: Word64)                                  -> -- | @pData@ is a pointer to a user-allocated buffer where the results will                                     -- be written.                                     ---                                    -- @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes+                                    -- #VUID-vkGetAccelerationStructureHandleNV-pData-parameter# @pData@ /must/+                                    -- be a valid pointer to an array of @dataSize@ bytes                                     ("data" ::: Ptr ())                                  -> io () getAccelerationStructureHandleNV device accelerationStructure dataSize data' = liftIO $ do@@ -1274,44 +1368,54 @@ -- -- == Valid Usage ----- -   If the @flags@ member of any element of @pCreateInfos@ contains the+-- -   #VUID-vkCreateRayTracingPipelinesNV-flags-03415# If the @flags@+--     member of any element of @pCreateInfos@ contains the --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' --     flag, and the @basePipelineIndex@ member of that same element is not --     @-1@, @basePipelineIndex@ /must/ be less than the index into --     @pCreateInfos@ that corresponds to that element ----- -   If the @flags@ member of any element of @pCreateInfos@ contains the+-- -   #VUID-vkCreateRayTracingPipelinesNV-flags-03416# If the @flags@+--     member of any element of @pCreateInfos@ contains the --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' --     flag, the base pipeline /must/ have been created with the --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT' --     flag set ----- -   If @pipelineCache@ was created with+-- -   #VUID-vkCreateRayTracingPipelinesNV-pipelineCache-02903# If+--     @pipelineCache@ was created with --     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT', --     host access to @pipelineCache@ /must/ be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized> -- -- == Valid Usage (Implicit) ----- -   @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle+-- -   #VUID-vkCreateRayTracingPipelinesNV-device-parameter# @device@+--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle ----- -   If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkCreateRayTracingPipelinesNV-pipelineCache-parameter# If+--     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @pipelineCache@ /must/ be a valid --     'Vulkan.Core10.Handles.PipelineCache' handle ----- -   @pCreateInfos@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCreateRayTracingPipelinesNV-pCreateInfos-parameter#+--     @pCreateInfos@ /must/ be a valid pointer to an array of --     @createInfoCount@ valid 'RayTracingPipelineCreateInfoNV' structures ----- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid---     pointer to a valid---     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure+-- -   #VUID-vkCreateRayTracingPipelinesNV-pAllocator-parameter# If+--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer+--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'+--     structure ----- -   @pPipelines@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCreateRayTracingPipelinesNV-pPipelines-parameter#+--     @pPipelines@ /must/ be a valid pointer to an array of --     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles ----- -   @createInfoCount@ /must/ be greater than @0@+-- -   #VUID-vkCreateRayTracingPipelinesNV-createInfoCount-arraylength#+--     @createInfoCount@ /must/ be greater than @0@ ----- -   If @pipelineCache@ is a valid handle, it /must/ have been created,+-- -   #VUID-vkCreateRayTracingPipelinesNV-pipelineCache-parent# If+--     @pipelineCache@ is a valid handle, it /must/ have been created, --     allocated, or retrieved from @device@ -- -- == Return Codes@@ -1563,43 +1667,52 @@ -- -- == Valid Usage ----- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV' then---     @generalShader@ /must/ be a valid index into+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-type-02413# If @type@ is+--     'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV' then @generalShader@+--     /must/ be a valid index into --     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of --     'SHADER_STAGE_RAYGEN_BIT_NV', 'SHADER_STAGE_MISS_BIT_NV', or --     'SHADER_STAGE_CALLABLE_BIT_NV' ----- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV' then---     @closestHitShader@, @anyHitShader@, and @intersectionShader@ /must/---     be 'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV'+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-type-02414# If @type@ is+--     'RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV' then @closestHitShader@,+--     @anyHitShader@, and @intersectionShader@ /must/ be+--     'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' ----- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV'---     then @intersectionShader@ /must/ be a valid index into+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-type-02415# If @type@ is+--     'RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV' then+--     @intersectionShader@ /must/ be a valid index into --     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of --     'SHADER_STAGE_INTERSECTION_BIT_NV' ----- -   If @type@ is 'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV'---     then @intersectionShader@ /must/ be+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-type-02416# If @type@ is+--     'RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV' then+--     @intersectionShader@ /must/ be --     'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' ----- -   @closestHitShader@ /must/ be either+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-closestHitShader-02417#+--     @closestHitShader@ /must/ be either --     'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' or a valid index into --     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of --     'SHADER_STAGE_CLOSEST_HIT_BIT_NV' ----- -   @anyHitShader@ /must/ be either+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-anyHitShader-02418#+--     @anyHitShader@ /must/ be either --     'Vulkan.Core10.APIConstants.SHADER_UNUSED_NV' or a valid index into --     'RayTracingPipelineCreateInfoNV'::@pStages@ referring to a shader of --     'SHADER_STAGE_ANY_HIT_BIT_NV' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-pNext-pNext# @pNext@+--     /must/ be @NULL@ ----- -   @type@ /must/ be a valid+-- -   #VUID-VkRayTracingShaderGroupCreateInfoNV-type-parameter# @type@+--     /must/ be a valid --     'Vulkan.Extensions.VK_KHR_ray_tracing.RayTracingShaderGroupTypeKHR' --     value --@@ -1703,80 +1816,99 @@ -- -- == Valid Usage ----- -   If @flags@ contains the+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03421# If @flags@+--     contains the --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' --     flag, and @basePipelineIndex@ is @-1@, @basePipelineHandle@ /must/ --     be a valid handle to a ray tracing 'Vulkan.Core10.Handles.Pipeline' ----- -   If @flags@ contains the+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03422# If @flags@+--     contains the --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' --     flag, and @basePipelineHandle@ is --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/ --     be a valid index into the calling command’s @pCreateInfos@ parameter ----- -   If @flags@ contains the+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03423# If @flags@+--     contains the --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' --     flag, and @basePipelineIndex@ is not @-1@, @basePipelineHandle@ --     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' ----- -   If @flags@ contains the+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03424# If @flags@+--     contains the --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT' --     flag, and @basePipelineHandle@ is not --     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/ --     be @-1@ ----- -   The @stage@ member of at least one element of @pStages@ /must/ be+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-stage-03425# The @stage@+--     member of at least one element of @pStages@ /must/ be --     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_RAYGEN_BIT_KHR' ----- -   The shader code for the entry points identified by @pStages@, and---     the rest of the state identified by this structure /must/ adhere to---     the pipeline linking rules described in the+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-pStages-03426# The shader+--     code for the entry points identified by @pStages@, and the rest of+--     the state identified by this structure /must/ adhere to the pipeline+--     linking rules described in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces Shader Interfaces> --     chapter ----- -   @layout@ /must/ be+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-layout-03427# @layout@ /must/+--     be --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent> --     with all shaders specified in @pStages@ ----- -   The number of resources in @layout@ accessible to each shader stage---     that is used by the pipeline /must/ be less than or equal to+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-layout-03428# The number of+--     resources in @layout@ accessible to each shader stage that is used+--     by the pipeline /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@ ----- -   @flags@ /must/ not include+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-02904# @flags@ /must/+--     not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV' ----- -   If the+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-pipelineCreationCacheControl-02905#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl> --     feature is not enabled, @flags@ /must/ not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT' --     or --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT' ----- -   @flags@ /must/ not include+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03456# @flags@ /must/+--     not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR' ----- -   @maxRecursionDepth@ /must/ be less than or equal to+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-maxRecursionDepth-03457#+--     @maxRecursionDepth@ /must/ be less than or equal to --     'PhysicalDeviceRayTracingPropertiesNV'::@maxRecursionDepth@ ----- -   @flags@ /must/ not include+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03458# @flags@ /must/+--     not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR' ----- -   @flags@ /must/ not include+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03459# @flags@ /must/+--     not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR' ----- -   @flags@ /must/ not include+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03460# @flags@ /must/+--     not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR' ----- -   @flags@ /must/ not include+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03461# @flags@ /must/+--     not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR' ----- -   @flags@ /must/ not include+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03462# @flags@ /must/+--     not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR' ----- -   @flags@ /must/ not include+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-03463# @flags@ /must/+--     not include --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR' ----- -   @flags@ /must/ not include both+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-02957# @flags@ /must/+--     not include both --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEFER_COMPILE_BIT_NV' --     and --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT'@@ -1784,34 +1916,41 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV' ----- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-pNext-pNext# @pNext@ /must/+--     be @NULL@ or a pointer to a valid instance of --     'Vulkan.Extensions.VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfoEXT' ----- -   The @sType@ value of each struct in the @pNext@ chain /must/ be---     unique+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-sType-unique# The @sType@+--     value of each struct in the @pNext@ chain /must/ be unique ----- -   @flags@ /must/ be a valid combination of+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-flags-parameter# @flags@+--     /must/ be a valid combination of --     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits' --     values ----- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@---     valid 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'---     structures+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-pStages-parameter# @pStages@+--     /must/ be a valid pointer to an array of @stageCount@ valid+--     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures ----- -   @pGroups@ /must/ be a valid pointer to an array of @groupCount@---     valid 'RayTracingShaderGroupCreateInfoNV' structures+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-pGroups-parameter# @pGroups@+--     /must/ be a valid pointer to an array of @groupCount@ valid+--     'RayTracingShaderGroupCreateInfoNV' structures ----- -   @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'---     handle+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-layout-parameter# @layout@+--     /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle ----- -   @stageCount@ /must/ be greater than @0@+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-stageCount-arraylength#+--     @stageCount@ /must/ be greater than @0@ ----- -   @groupCount@ /must/ be greater than @0@+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-groupCount-arraylength#+--     @groupCount@ /must/ be greater than @0@ ----- -   Both of @basePipelineHandle@, and @layout@ that are valid handles of+-- -   #VUID-VkRayTracingPipelineCreateInfoNV-commonparent# Both of+--     @basePipelineHandle@, and @layout@ that are valid handles of --     non-ignored parameters /must/ have been created, allocated, or --     retrieved from the same 'Vulkan.Core10.Handles.Device' --@@ -1945,12 +2084,14 @@ -- -- == Valid Usage ----- -   @vertexOffset@ /must/ be less than the size of @vertexData@+-- -   #VUID-VkGeometryTrianglesNV-vertexOffset-02428# @vertexOffset@+--     /must/ be less than the size of @vertexData@ ----- -   @vertexOffset@ /must/ be a multiple of the component size of---     @vertexFormat@+-- -   #VUID-VkGeometryTrianglesNV-vertexOffset-02429# @vertexOffset@+--     /must/ be a multiple of the component size of @vertexFormat@ ----- -   @vertexFormat@ /must/ be one of+-- -   #VUID-VkGeometryTrianglesNV-vertexFormat-02430# @vertexFormat@+--     /must/ be one of --     'Vulkan.Core10.Enums.Format.FORMAT_R32G32B32_SFLOAT', --     'Vulkan.Core10.Enums.Format.FORMAT_R32G32_SFLOAT', --     'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16_SFLOAT',@@ -1958,54 +2099,64 @@ --     'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SNORM', or --     'Vulkan.Core10.Enums.Format.FORMAT_R16G16B16_SNORM' ----- -   @indexOffset@ /must/ be less than the size of @indexData@+-- -   #VUID-VkGeometryTrianglesNV-indexOffset-02431# @indexOffset@ /must/+--     be less than the size of @indexData@ ----- -   @indexOffset@ /must/ be a multiple of the element size of---     @indexType@+-- -   #VUID-VkGeometryTrianglesNV-indexOffset-02432# @indexOffset@ /must/+--     be a multiple of the element size of @indexType@ ----- -   @indexType@ /must/ be+-- -   #VUID-VkGeometryTrianglesNV-indexType-02433# @indexType@ /must/ be --     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT16', --     'Vulkan.Core10.Enums.IndexType.INDEX_TYPE_UINT32', or --     'INDEX_TYPE_NONE_NV' ----- -   @indexData@ /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' if---     @indexType@ is 'INDEX_TYPE_NONE_NV'+-- -   #VUID-VkGeometryTrianglesNV-indexData-02434# @indexData@ /must/ be+--     'Vulkan.Core10.APIConstants.NULL_HANDLE' if @indexType@ is+--     'INDEX_TYPE_NONE_NV' ----- -   @indexData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle---     if @indexType@ is not 'INDEX_TYPE_NONE_NV'+-- -   #VUID-VkGeometryTrianglesNV-indexData-02435# @indexData@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle if @indexType@ is not+--     'INDEX_TYPE_NONE_NV' ----- -   @indexCount@ /must/ be @0@ if @indexType@ is 'INDEX_TYPE_NONE_NV'+-- -   #VUID-VkGeometryTrianglesNV-indexCount-02436# @indexCount@ /must/ be+--     @0@ if @indexType@ is 'INDEX_TYPE_NONE_NV' ----- -   @transformOffset@ /must/ be less than the size of @transformData@+-- -   #VUID-VkGeometryTrianglesNV-transformOffset-02437# @transformOffset@+--     /must/ be less than the size of @transformData@ ----- -   @transformOffset@ /must/ be a multiple of @16@+-- -   #VUID-VkGeometryTrianglesNV-transformOffset-02438# @transformOffset@+--     /must/ be a multiple of @16@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkGeometryTrianglesNV-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkGeometryTrianglesNV-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   If @vertexData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @vertexData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkGeometryTrianglesNV-vertexData-parameter# If @vertexData@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @vertexData@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @vertexFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'---     value+-- -   #VUID-VkGeometryTrianglesNV-vertexFormat-parameter# @vertexFormat@+--     /must/ be a valid 'Vulkan.Core10.Enums.Format.Format' value ----- -   If @indexData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @indexData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkGeometryTrianglesNV-indexData-parameter# If @indexData@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @indexData@ /must/ be+--     a valid 'Vulkan.Core10.Handles.Buffer' handle ----- -   @indexType@ /must/ be a valid---     'Vulkan.Core10.Enums.IndexType.IndexType' value+-- -   #VUID-VkGeometryTrianglesNV-indexType-parameter# @indexType@ /must/+--     be a valid 'Vulkan.Core10.Enums.IndexType.IndexType' value ----- -   If @transformData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-VkGeometryTrianglesNV-transformData-parameter# If+--     @transformData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @transformData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' --     handle ----- -   Each of @indexData@, @transformData@, and @vertexData@ that are---     valid handles of non-ignored parameters /must/ have been created,---     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'+-- -   #VUID-VkGeometryTrianglesNV-commonparent# Each of @indexData@,+--     @transformData@, and @vertexData@ that are valid handles of+--     non-ignored parameters /must/ have been created, allocated, or+--     retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- = See Also --@@ -2129,21 +2280,25 @@ -- -- == Valid Usage ----- -   @offset@ /must/ be less than the size of @aabbData@+-- -   #VUID-VkGeometryAABBNV-offset-02439# @offset@ /must/ be less than+--     the size of @aabbData@ ----- -   @offset@ /must/ be a multiple of @8@+-- -   #VUID-VkGeometryAABBNV-offset-02440# @offset@ /must/ be a multiple+--     of @8@ ----- -   @stride@ /must/ be a multiple of @8@+-- -   #VUID-VkGeometryAABBNV-stride-02441# @stride@ /must/ be a multiple+--     of @8@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkGeometryAABBNV-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GEOMETRY_AABB_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkGeometryAABBNV-pNext-pNext# @pNext@ /must/ be @NULL@ ----- -   If @aabbData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @aabbData@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle+-- -   #VUID-VkGeometryAABBNV-aabbData-parameter# If @aabbData@ is not+--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @aabbData@ /must/ be a+--     valid 'Vulkan.Core10.Handles.Buffer' handle -- -- = See Also --@@ -2221,12 +2376,14 @@   { -- | @triangles@ contains triangle data if 'GeometryNV'::@geometryType@ is     -- 'GEOMETRY_TYPE_TRIANGLES_NV'.     ---    -- @triangles@ /must/ be a valid 'GeometryTrianglesNV' structure+    -- #VUID-VkGeometryDataNV-triangles-parameter# @triangles@ /must/ be a+    -- valid 'GeometryTrianglesNV' structure     triangles :: GeometryTrianglesNV   , -- | @aabbs@ contains axis-aligned bounding box data if     -- 'GeometryNV'::@geometryType@ is 'GEOMETRY_TYPE_AABBS_NV'.     ---    -- @aabbs@ /must/ be a valid 'GeometryAABBNV' structure+    -- #VUID-VkGeometryDataNV-aabbs-parameter# @aabbs@ /must/ be a valid+    -- 'GeometryAABBNV' structure     aabbs :: GeometryAABBNV   }   deriving (Typeable)@@ -2277,20 +2434,22 @@     -- 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryTypeKHR' which this     -- geometry refers to.     ---    -- @geometryType@ /must/ be 'GEOMETRY_TYPE_TRIANGLES_NV' or-    -- 'GEOMETRY_TYPE_AABBS_NV'+    -- #VUID-VkGeometryNV-geometryType-03503# @geometryType@ /must/ be+    -- 'GEOMETRY_TYPE_TRIANGLES_NV' or 'GEOMETRY_TYPE_AABBS_NV'     ---    -- @geometryType@ /must/ be a valid-    -- 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryTypeKHR' value+    -- #VUID-VkGeometryNV-geometryType-parameter# @geometryType@ /must/ be a+    -- valid 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryTypeKHR' value     geometryType :: GeometryTypeKHR   , -- | @geometry@ contains the geometry data as described in 'GeometryDataNV'.     ---    -- @geometry@ /must/ be a valid 'GeometryDataNV' structure+    -- #VUID-VkGeometryNV-geometry-parameter# @geometry@ /must/ be a valid+    -- 'GeometryDataNV' structure     geometry :: GeometryDataNV   , -- | @flags@ has 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryFlagBitsKHR'     -- describing options for this geometry.     ---    -- @flags@ /must/ be a valid combination of+    -- #VUID-VkGeometryNV-flags-parameter# @flags@ /must/ be a valid+    -- combination of     -- 'Vulkan.Extensions.VK_KHR_ray_tracing.GeometryFlagBitsKHR' values     flags :: GeometryFlagsKHR   }@@ -2345,52 +2504,62 @@ -- -- == Valid Usage ----- -   @geometryCount@ /must/ be less than or equal to+-- -   #VUID-VkAccelerationStructureInfoNV-geometryCount-02422#+--     @geometryCount@ /must/ be less than or equal to --     'PhysicalDeviceRayTracingPropertiesNV'::@maxGeometryCount@ ----- -   @instanceCount@ /must/ be less than or equal to+-- -   #VUID-VkAccelerationStructureInfoNV-instanceCount-02423#+--     @instanceCount@ /must/ be less than or equal to --     'PhysicalDeviceRayTracingPropertiesNV'::@maxInstanceCount@ ----- -   The total number of triangles in all geometries /must/ be less than---     or equal to---     'PhysicalDeviceRayTracingPropertiesNV'::@maxTriangleCount@+-- -   #VUID-VkAccelerationStructureInfoNV-maxTriangleCount-02424# The+--     total number of triangles in all geometries /must/ be less than or+--     equal to 'PhysicalDeviceRayTracingPropertiesNV'::@maxTriangleCount@ ----- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV' then---     @geometryCount@ /must/ be @0@+-- -   #VUID-VkAccelerationStructureInfoNV-type-02425# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV' then @geometryCount@+--     /must/ be @0@ ----- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV' then---     @instanceCount@ /must/ be @0@+-- -   #VUID-VkAccelerationStructureInfoNV-type-02426# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV' then @instanceCount@+--     /must/ be @0@ ----- -   If @type@ is 'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV' then the+-- -   #VUID-VkAccelerationStructureInfoNV-type-02786# If @type@ is+--     'ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV' then the --     @geometryType@ member of each geometry in @pGeometries@ /must/ be --     the same ----- -   If @flags@ has the+-- -   #VUID-VkAccelerationStructureInfoNV-flags-02592# If @flags@ has the --     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV' bit set, --     then it /must/ not have the --     'BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV' bit set ----- -   @scratch@ /must/ have been created with---     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag+-- -   #VUID-VkAccelerationStructureInfoNV-scratch-02781# @scratch@ /must/+--     have been created with 'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag ----- -   If @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-VkAccelerationStructureInfoNV-instanceData-02782# If+--     @instanceData@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @instanceData@ /must/ have been created with --     'BUFFER_USAGE_RAY_TRACING_BIT_NV' usage flag -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkAccelerationStructureInfoNV-sType-sType# @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkAccelerationStructureInfoNV-pNext-pNext# @pNext@ /must/ be+--     @NULL@ ----- -   @type@ /must/ be a valid 'AccelerationStructureTypeNV' value+-- -   #VUID-VkAccelerationStructureInfoNV-type-parameter# @type@ /must/ be+--     a valid 'AccelerationStructureTypeNV' value ----- -   @flags@ /must/ be a valid combination of---     'BuildAccelerationStructureFlagBitsNV' values+-- -   #VUID-VkAccelerationStructureInfoNV-flags-parameter# @flags@ /must/+--     be a valid combination of 'BuildAccelerationStructureFlagBitsNV'+--     values ----- -   If @geometryCount@ is not @0@, @pGeometries@ /must/ be a valid---     pointer to an array of @geometryCount@ valid 'GeometryNV' structures+-- -   #VUID-VkAccelerationStructureInfoNV-pGeometries-parameter# If+--     @geometryCount@ is not @0@, @pGeometries@ /must/ be a valid pointer+--     to an array of @geometryCount@ valid 'GeometryNV' structures -- -- = See Also --@@ -2467,17 +2636,21 @@ -- -- == Valid Usage ----- -   If @compactedSize@ is not @0@ then both @info.geometryCount@ and+-- -   #VUID-VkAccelerationStructureCreateInfoNV-compactedSize-02421# If+--     @compactedSize@ is not @0@ then both @info.geometryCount@ and --     @info.instanceCount@ /must/ be @0@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkAccelerationStructureCreateInfoNV-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV' ----- -   @pNext@ /must/ be @NULL@+-- -   #VUID-VkAccelerationStructureCreateInfoNV-pNext-pNext# @pNext@+--     /must/ be @NULL@ ----- -   @info@ /must/ be a valid 'AccelerationStructureInfoNV' structure+-- -   #VUID-VkAccelerationStructureCreateInfoNV-info-parameter# @info@+--     /must/ be a valid 'AccelerationStructureInfoNV' structure -- -- = See Also --@@ -2552,12 +2725,14 @@     -- returns the memory requirements for the scratch memory when doing an     -- update.     --+    -- #VUID-VkAccelerationStructureMemoryRequirementsInfoNV-type-parameter#     -- @type@ /must/ be a valid 'AccelerationStructureMemoryRequirementsTypeNV'     -- value     type' :: AccelerationStructureMemoryRequirementsTypeNV   , -- | @accelerationStructure@ is the acceleration structure to be queried for     -- memory requirements.     --+    -- #VUID-VkAccelerationStructureMemoryRequirementsInfoNV-accelerationStructure-parameter#     -- @accelerationStructure@ /must/ be a valid 'AccelerationStructureNV'     -- handle     accelerationStructure :: AccelerationStructureNV
src/Vulkan/Extensions/VK_NV_representative_fragment_test.hs view
@@ -56,8 +56,9 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceRepresentativeFragmentTestFeaturesNV = PhysicalDeviceRepresentativeFragmentTestFeaturesNV-  { -- | @representativeFragmentTest@ indicates whether the implementation-    -- supports the representative fragment test. See+  { -- | #features-representativeFragmentTest# @representativeFragmentTest@+    -- indicates whether the implementation supports the representative+    -- fragment test. See     -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-rep-frag-test Representative Fragment Test>.     representativeFragmentTest :: Bool }   deriving (Typeable, Eq)
src/Vulkan/Extensions/VK_NV_scissor_exclusive.hs view
@@ -78,53 +78,59 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetExclusiveScissorNV-None-02031# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-exclusiveScissor exclusive scissor> --     feature /must/ be enabled ----- -   @firstExclusiveScissor@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@------ -   The sum of @firstExclusiveScissor@ and @exclusiveScissorCount@---     /must/ be between @1@ and+-- -   #VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02034# The+--     sum of @firstExclusiveScissor@ and @exclusiveScissorCount@ /must/ be+--     between @1@ and --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@, --     inclusive ----- -   If the+-- -   #VUID-vkCmdSetExclusiveScissorNV-firstExclusiveScissor-02035# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports> --     feature is not enabled, @firstExclusiveScissor@ /must/ be @0@ ----- -   If the+-- -   #VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-02036# If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports> --     feature is not enabled, @exclusiveScissorCount@ /must/ be @1@ ----- -   The @x@ and @y@ members of @offset@ in each member of---     @pExclusiveScissors@ /must/ be greater than or equal to @0@+-- -   #VUID-vkCmdSetExclusiveScissorNV-x-02037# The @x@ and @y@ members of+--     @offset@ in each member of @pExclusiveScissors@ /must/ be greater+--     than or equal to @0@ ----- -   Evaluation of (@offset.x@ + @extent.width@) for each member of+-- -   #VUID-vkCmdSetExclusiveScissorNV-offset-02038# Evaluation of+--     (@offset.x@ + @extent.width@) for each member of --     @pExclusiveScissors@ /must/ not cause a signed integer addition --     overflow ----- -   Evaluation of (@offset.y@ + @extent.height@) for each member of+-- -   #VUID-vkCmdSetExclusiveScissorNV-offset-02039# Evaluation of+--     (@offset.y@ + @extent.height@) for each member of --     @pExclusiveScissors@ /must/ not cause a signed integer addition --     overflow -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetExclusiveScissorNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pExclusiveScissors@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCmdSetExclusiveScissorNV-pExclusiveScissors-parameter#+--     @pExclusiveScissors@ /must/ be a valid pointer to an array of --     @exclusiveScissorCount@ 'Vulkan.Core10.FundamentalTypes.Rect2D' --     structures ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetExclusiveScissorNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetExclusiveScissorNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   @exclusiveScissorCount@ /must/ be greater than @0@+-- -   #VUID-vkCmdSetExclusiveScissorNV-exclusiveScissorCount-arraylength#+--     @exclusiveScissorCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -201,8 +207,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceExclusiveScissorFeaturesNV = PhysicalDeviceExclusiveScissorFeaturesNV-  { -- | @exclusiveScissor@ indicates that the implementation supports the-    -- exclusive scissor test.+  { -- | #features-exclusiveScissor# @exclusiveScissor@ indicates that the+    -- implementation supports the exclusive scissor test.     exclusiveScissor :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)@@ -260,20 +266,24 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02027#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports> --     feature is not enabled, @exclusiveScissorCount@ /must/ be @0@ or @1@ ----- -   @exclusiveScissorCount@ /must/ be less than or equal to+-- -   #VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02028#+--     @exclusiveScissorCount@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@ ----- -   @exclusiveScissorCount@ /must/ be @0@ or greater than or equal to+-- -   #VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-exclusiveScissorCount-02029#+--     @exclusiveScissorCount@ /must/ be @0@ or greater than or equal to --     the @viewportCount@ member of --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineViewportExclusiveScissorStateCreateInfoNV-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV' -- -- = See Also
src/Vulkan/Extensions/VK_NV_shader_image_footprint.hs view
@@ -53,8 +53,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderImageFootprintFeaturesNV = PhysicalDeviceShaderImageFootprintFeaturesNV-  { -- | @imageFootprint@ specifies whether the implementation supports the-    -- @ImageFootprintNV@ SPIR-V capability.+  { -- | #features-imageFootprint# @imageFootprint@ specifies whether the+    -- implementation supports the @ImageFootprintNV@ SPIR-V capability.     imageFootprint :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_NV_shader_sm_builtins.hs view
@@ -52,10 +52,11 @@ -- -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderSMBuiltinsPropertiesNV = PhysicalDeviceShaderSMBuiltinsPropertiesNV-  { -- | @shaderSMCount@ is the number of SMs on the device.+  { -- | #limits-shaderSMCount# @shaderSMCount@ is the number of SMs on the+    -- device.     shaderSMCount :: Word32-  , -- | @shaderWarpsPerSM@ is the maximum number of simultaneously executing-    -- warps on an SM.+  , -- | #limits-shaderWarpsPerSM# @shaderWarpsPerSM@ is the maximum number of+    -- simultaneously executing warps on an SM.     shaderWarpsPerSM :: Word32   }   deriving (Typeable, Eq)@@ -125,8 +126,8 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShaderSMBuiltinsFeaturesNV = PhysicalDeviceShaderSMBuiltinsFeaturesNV-  { -- | @shaderSMBuiltins@ indicates whether the implementation supports the-    -- SPIR-V @ShaderSMBuiltinsNV@ capability.+  { -- | #features-shaderSMBuiltins# @shaderSMBuiltins@ indicates whether the+    -- implementation supports the SPIR-V @ShaderSMBuiltinsNV@ capability.     shaderSMBuiltins :: Bool }   deriving (Typeable, Eq) #if defined(GENERIC_INSTANCES)
src/Vulkan/Extensions/VK_NV_shading_rate_image.hs view
@@ -114,51 +114,62 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdBindShadingRateImageNV-None-02058# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image> --     feature /must/ be enabled ----- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it---     /must/ be a valid 'Vulkan.Core10.Handles.ImageView' handle of type+-- -   #VUID-vkCmdBindShadingRateImageNV-imageView-02059# If @imageView@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ be a valid+--     'Vulkan.Core10.Handles.ImageView' handle of type --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' or --     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' ----- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it---     /must/ have a format of 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT'+-- -   #VUID-vkCmdBindShadingRateImageNV-imageView-02060# If @imageView@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ have a+--     format of 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT' ----- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it---     /must/ have been created with a @usage@ value including+-- -   #VUID-vkCmdBindShadingRateImageNV-imageView-02061# If @imageView@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ have been+--     created with a @usage@ value including --     'Vulkan.Core10.Enums.ImageUsageFlagBits.IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV' ----- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @imageLayout@ /must/ match the actual---     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' of each subresource---     accessible from @imageView@ at the time the subresource is accessed+-- -   #VUID-vkCmdBindShadingRateImageNV-imageView-02062# If @imageView@ is+--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @imageLayout@ /must/+--     match the actual 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' of+--     each subresource accessible from @imageView@ at the time the+--     subresource is accessed ----- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',---     @imageLayout@ /must/ be+-- -   #VUID-vkCmdBindShadingRateImageNV-imageLayout-02063# If @imageView@+--     is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @imageLayout@+--     /must/ be --     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV' --     or 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_GENERAL' -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdBindShadingRateImageNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   If @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',+-- -   #VUID-vkCmdBindShadingRateImageNV-imageView-parameter# If+--     @imageView@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', --     @imageView@ /must/ be a valid 'Vulkan.Core10.Handles.ImageView' --     handle ----- -   @imageLayout@ /must/ be a valid+-- -   #VUID-vkCmdBindShadingRateImageNV-imageLayout-parameter#+--     @imageLayout@ /must/ be a valid --     'Vulkan.Core10.Enums.ImageLayout.ImageLayout' value ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdBindShadingRateImageNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdBindShadingRateImageNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   Both of @commandBuffer@, and @imageView@ that are valid handles of+-- -   #VUID-vkCmdBindShadingRateImageNV-commonparent# Both of+--     @commandBuffer@, and @imageView@ that are valid handles of --     non-ignored parameters /must/ have been created, allocated, or --     retrieved from the same 'Vulkan.Core10.Handles.Device' --@@ -220,41 +231,45 @@ -- -- == Valid Usage ----- -   The+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-None-02064# The --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shading rate image> --     feature /must/ be enabled ----- -   @firstViewport@ /must/ be less than---     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@------ -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@---     and+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02067# The+--     sum of @firstViewport@ and @viewportCount@ /must/ be between @1@ and --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@, --     inclusive ----- -   If the+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-firstViewport-02068# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports> --     feature is not enabled, @firstViewport@ /must/ be @0@ ----- -   If the+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-02069# If+--     the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports> --     feature is not enabled, @viewportCount@ /must/ be @1@ -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @pShadingRatePalettes@ /must/ be a valid pointer to an array of+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-pShadingRatePalettes-parameter#+--     @pShadingRatePalettes@ /must/ be a valid pointer to an array of --     @viewportCount@ valid 'ShadingRatePaletteNV' structures ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-commandBuffer-cmdpool#+--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations ----- -   @viewportCount@ /must/ be greater than @0@+-- -   #VUID-vkCmdSetViewportShadingRatePaletteNV-viewportCount-arraylength#+--     @viewportCount@ /must/ be greater than @0@ -- -- == Host Synchronization --@@ -320,28 +335,34 @@ -- -- == Valid Usage ----- -   If @sampleOrderType@ is not 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV',+-- -   #VUID-vkCmdSetCoarseSampleOrderNV-sampleOrderType-02081# If+--     @sampleOrderType@ is not 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV', --     @customSamplerOrderCount@ /must/ be @0@ ----- -   The array @pCustomSampleOrders@ /must/ not contain two structures---     with matching values for both the @shadingRate@ and @sampleCount@---     members+-- -   #VUID-vkCmdSetCoarseSampleOrderNV-pCustomSampleOrders-02235# The+--     array @pCustomSampleOrders@ /must/ not contain two structures with+--     matching values for both the @shadingRate@ and @sampleCount@ members -- -- == Valid Usage (Implicit) ----- -   @commandBuffer@ /must/ be a valid+-- -   #VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-parameter#+--     @commandBuffer@ /must/ be a valid --     'Vulkan.Core10.Handles.CommandBuffer' handle ----- -   @sampleOrderType@ /must/ be a valid 'CoarseSampleOrderTypeNV' value+-- -   #VUID-vkCmdSetCoarseSampleOrderNV-sampleOrderType-parameter#+--     @sampleOrderType@ /must/ be a valid 'CoarseSampleOrderTypeNV' value ----- -   If @customSampleOrderCount@ is not @0@, @pCustomSampleOrders@ /must/---     be a valid pointer to an array of @customSampleOrderCount@ valid+-- -   #VUID-vkCmdSetCoarseSampleOrderNV-pCustomSampleOrders-parameter# If+--     @customSampleOrderCount@ is not @0@, @pCustomSampleOrders@ /must/ be+--     a valid pointer to an array of @customSampleOrderCount@ valid --     'CoarseSampleOrderCustomNV' structures ----- -   @commandBuffer@ /must/ be in the+-- -   #VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-recording#+--     @commandBuffer@ /must/ be in the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state> ----- -   The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was+-- -   #VUID-vkCmdSetCoarseSampleOrderNV-commandBuffer-cmdpool# The+--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was --     allocated from /must/ support graphics operations -- -- == Host Synchronization@@ -405,6 +426,7 @@     -- 'ShadingRatePaletteEntryNV' enums defining the shading rate for each     -- palette entry.     --+    -- #VUID-VkShadingRatePaletteNV-pShadingRatePaletteEntries-parameter#     -- @pShadingRatePaletteEntries@ /must/ be a valid pointer to an array of     -- @shadingRatePaletteEntryCount@ valid 'ShadingRatePaletteEntryNV' values     shadingRatePaletteEntries :: Vector ShadingRatePaletteEntryNV }@@ -454,24 +476,29 @@ -- -- == Valid Usage ----- -   If the+-- -   #VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02054#+--     If the --     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multiViewport multiple viewports> --     feature is not enabled, @viewportCount@ /must/ be @0@ or @1@ ----- -   @viewportCount@ /must/ be less than or equal to+-- -   #VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-02055#+--     @viewportCount@ /must/ be less than or equal to --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxViewports@ ----- -   If @shadingRateImageEnable@ is+-- -   #VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-shadingRateImageEnable-02056#+--     If @shadingRateImageEnable@ is --     'Vulkan.Core10.FundamentalTypes.TRUE', @viewportCount@ /must/ be --     greater or equal to the @viewportCount@ member of --     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV' ----- -   @viewportCount@ /must/ be greater than @0@+-- -   #VUID-VkPipelineViewportShadingRateImageStateCreateInfoNV-viewportCount-arraylength#+--     @viewportCount@ /must/ be greater than @0@ -- -- = See Also --@@ -559,14 +586,14 @@ -- 'Vulkan.Core10.FundamentalTypes.Bool32', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShadingRateImageFeaturesNV = PhysicalDeviceShadingRateImageFeaturesNV-  { -- | @shadingRateImage@ indicates that the implementation supports the use of-    -- a shading rate image to derive an effective shading rate for fragment-    -- processing. It also indicates that the implementation supports the-    -- @ShadingRateNV@ SPIR-V execution mode.+  { -- | #features-shadingRateImage# @shadingRateImage@ indicates that the+    -- implementation supports the use of a shading rate image to derive an+    -- effective shading rate for fragment processing. It also indicates that+    -- the implementation supports the @ShadingRateNV@ SPIR-V execution mode.     shadingRateImage :: Bool-  , -- | @shadingRateCoarseSampleOrder@ indicates that the implementation-    -- supports a user-configurable ordering of coverage samples in fragments-    -- larger than one pixel.+  , -- | #features-shadingRateCoarseSampleOrder# @shadingRateCoarseSampleOrder@+    -- indicates that the implementation supports a user-configurable ordering+    -- of coverage samples in fragments larger than one pixel.     shadingRateCoarseSampleOrder :: Bool   }   deriving (Typeable, Eq)@@ -636,17 +663,20 @@ -- 'Vulkan.Core10.FundamentalTypes.Extent2D', -- 'Vulkan.Core10.Enums.StructureType.StructureType' data PhysicalDeviceShadingRateImagePropertiesNV = PhysicalDeviceShadingRateImagePropertiesNV-  { -- | @shadingRateTexelSize@ indicates the width and height of the portion of-    -- the framebuffer corresponding to each texel in the shading rate image.+  { -- | #limits-shading-rate-texel-size# @shadingRateTexelSize@ indicates the+    -- width and height of the portion of the framebuffer corresponding to each+    -- texel in the shading rate image.     shadingRateTexelSize :: Extent2D-  , -- | @shadingRatePaletteSize@ indicates the maximum number of palette entries-    -- supported for the shading rate image.+  , -- | #limits-shading-rate-palette-size# @shadingRatePaletteSize@ indicates+    -- the maximum number of palette entries supported for the shading rate+    -- image.     shadingRatePaletteSize :: Word32-  , -- | @shadingRateMaxCoarseSamples@ specifies the maximum number of coverage-    -- samples supported in a single fragment. If the product of the fragment-    -- size derived from the base shading rate and the number of coverage-    -- samples per pixel exceeds this limit, the final shading rate will be-    -- adjusted so that its product does not exceed the limit.+  , -- | #limits-shading-rate-max-coarse-samples# @shadingRateMaxCoarseSamples@+    -- specifies the maximum number of coverage samples supported in a single+    -- fragment. If the product of the fragment size derived from the base+    -- shading rate and the number of coverage samples per pixel exceeds this+    -- limit, the final shading rate will be adjusted so that its product does+    -- not exceed the limit.     shadingRateMaxCoarseSamples :: Word32   }   deriving (Typeable)@@ -701,18 +731,21 @@   { -- | @pixelX@ is added to the x coordinate of the upper-leftmost pixel of     -- each fragment to identify the pixel containing the coverage sample.     ---    -- @pixelX@ /must/ be less than the width (in pixels) of the fragment+    -- #VUID-VkCoarseSampleLocationNV-pixelX-02078# @pixelX@ /must/ be less+    -- than the width (in pixels) of the fragment     pixelX :: Word32   , -- | @pixelY@ is added to the y coordinate of the upper-leftmost pixel of     -- each fragment to identify the pixel containing the coverage sample.     ---    -- @pixelY@ /must/ be less than the height (in pixels) of the fragment+    -- #VUID-VkCoarseSampleLocationNV-pixelY-02079# @pixelY@ /must/ be less+    -- than the height (in pixels) of the fragment     pixelY :: Word32   , -- | @sample@ is the number of the coverage sample in the pixel identified by     -- @pixelX@ and @pixelY@.     ---    -- @sample@ /must/ be less than the number of coverage samples in each-    -- pixel belonging to the fragment+    -- #VUID-VkCoarseSampleLocationNV-sample-02080# @sample@ /must/ be less+    -- than the number of coverage samples in each pixel belonging to the+    -- fragment     sample :: Word32   }   deriving (Typeable, Eq)@@ -771,33 +804,41 @@ -- -- == Valid Usage ----- -   @shadingRate@ /must/ be a shading rate that generates fragments with---     more than one pixel+-- -   #VUID-VkCoarseSampleOrderCustomNV-shadingRate-02073# @shadingRate@+--     /must/ be a shading rate that generates fragments with more than one+--     pixel ----- -   @sampleCount@ /must/ correspond to a sample count enumerated in+-- -   #VUID-VkCoarseSampleOrderCustomNV-sampleCount-02074# @sampleCount@+--     /must/ correspond to a sample count enumerated in --     'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlags' whose --     corresponding bit is set in --     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@framebufferNoAttachmentsSampleCounts@ ----- -   @sampleLocationCount@ /must/ be equal to the product of+-- -   #VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02075#+--     @sampleLocationCount@ /must/ be equal to the product of --     @sampleCount@, the fragment width for @shadingRate@, and the --     fragment height for @shadingRate@ ----- -   @sampleLocationCount@ /must/ be less than or equal to the value of+-- -   #VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-02076#+--     @sampleLocationCount@ /must/ be less than or equal to the value of --     'PhysicalDeviceShadingRateImagePropertiesNV'::@shadingRateMaxCoarseSamples@ ----- -   The array @pSampleLocations@ /must/ contain exactly one entry for---     every combination of valid values for @pixelX@, @pixelY@, and---     @sample@ in the structure 'CoarseSampleOrderCustomNV'+-- -   #VUID-VkCoarseSampleOrderCustomNV-pSampleLocations-02077# The array+--     @pSampleLocations@ /must/ contain exactly one entry for every+--     combination of valid values for @pixelX@, @pixelY@, and @sample@ in+--     the structure 'CoarseSampleOrderCustomNV' -- -- == Valid Usage (Implicit) ----- -   @shadingRate@ /must/ be a valid 'ShadingRatePaletteEntryNV' value+-- -   #VUID-VkCoarseSampleOrderCustomNV-shadingRate-parameter#+--     @shadingRate@ /must/ be a valid 'ShadingRatePaletteEntryNV' value ----- -   @pSampleLocations@ /must/ be a valid pointer to an array of+-- -   #VUID-VkCoarseSampleOrderCustomNV-pSampleLocations-parameter#+--     @pSampleLocations@ /must/ be a valid pointer to an array of --     @sampleLocationCount@ 'CoarseSampleLocationNV' structures ----- -   @sampleLocationCount@ /must/ be greater than @0@+-- -   #VUID-VkCoarseSampleOrderCustomNV-sampleLocationCount-arraylength#+--     @sampleLocationCount@ /must/ be greater than @0@ -- -- = See Also --@@ -881,21 +922,26 @@ -- -- == Valid Usage ----- -   If @sampleOrderType@ is not 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV',+-- -   #VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sampleOrderType-02072#+--     If @sampleOrderType@ is not 'COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV', --     @customSamplerOrderCount@ /must/ be @0@ ----- -   The array @pCustomSampleOrders@ /must/ not contain two structures+-- -   #VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-pCustomSampleOrders-02234#+--     The array @pCustomSampleOrders@ /must/ not contain two structures --     with matching values for both the @shadingRate@ and @sampleCount@ --     members -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sType-sType#+--     @sType@ /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV' ----- -   @sampleOrderType@ /must/ be a valid 'CoarseSampleOrderTypeNV' value+-- -   #VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-sampleOrderType-parameter#+--     @sampleOrderType@ /must/ be a valid 'CoarseSampleOrderTypeNV' value ----- -   If @customSampleOrderCount@ is not @0@, @pCustomSampleOrders@ /must/+-- -   #VUID-VkPipelineViewportCoarseSampleOrderStateCreateInfoNV-pCustomSampleOrders-parameter#+--     If @customSampleOrderCount@ is not @0@, @pCustomSampleOrders@ /must/ --     be a valid pointer to an array of @customSampleOrderCount@ valid --     'CoarseSampleOrderCustomNV' structures --
src/Vulkan/Extensions/VK_NV_viewport_swizzle.hs view
@@ -74,22 +74,26 @@   { -- | @x@ is a 'ViewportCoordinateSwizzleNV' value specifying the swizzle     -- operation to apply to the x component of the primitive     ---    -- @x@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value+    -- #VUID-VkViewportSwizzleNV-x-parameter# @x@ /must/ be a valid+    -- 'ViewportCoordinateSwizzleNV' value     x :: ViewportCoordinateSwizzleNV   , -- | @y@ is a 'ViewportCoordinateSwizzleNV' value specifying the swizzle     -- operation to apply to the y component of the primitive     ---    -- @y@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value+    -- #VUID-VkViewportSwizzleNV-y-parameter# @y@ /must/ be a valid+    -- 'ViewportCoordinateSwizzleNV' value     y :: ViewportCoordinateSwizzleNV   , -- | @z@ is a 'ViewportCoordinateSwizzleNV' value specifying the swizzle     -- operation to apply to the z component of the primitive     ---    -- @z@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value+    -- #VUID-VkViewportSwizzleNV-z-parameter# @z@ /must/ be a valid+    -- 'ViewportCoordinateSwizzleNV' value     z :: ViewportCoordinateSwizzleNV   , -- | @w@ is a 'ViewportCoordinateSwizzleNV' value specifying the swizzle     -- operation to apply to the w component of the primitive     ---    -- @w@ /must/ be a valid 'ViewportCoordinateSwizzleNV' value+    -- #VUID-VkViewportSwizzleNV-w-parameter# @w@ /must/ be a valid+    -- 'ViewportCoordinateSwizzleNV' value     w :: ViewportCoordinateSwizzleNV   }   deriving (Typeable, Eq)@@ -150,11 +154,13 @@ data PipelineViewportSwizzleStateCreateInfoNV = PipelineViewportSwizzleStateCreateInfoNV   { -- | @flags@ is reserved for future use.     --+    -- #VUID-VkPipelineViewportSwizzleStateCreateInfoNV-flags-zerobitmask#     -- @flags@ /must/ be @0@     flags :: PipelineViewportSwizzleStateCreateFlagsNV   , -- | @pViewportSwizzles@ is a pointer to an array of 'ViewportSwizzleNV'     -- structures, defining the viewport swizzles.     --+    -- #VUID-VkPipelineViewportSwizzleStateCreateInfoNV-pViewportSwizzles-parameter#     -- @pViewportSwizzles@ /must/ be a valid pointer to an array of     -- @viewportCount@ valid 'ViewportSwizzleNV' structures     viewportSwizzles :: Vector ViewportSwizzleNV
src/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs view
@@ -43,29 +43,36 @@ -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-sType-sType# @sType@+--     /must/ be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV' ----- -   If @acquireCount@ is not @0@, @pAcquireSyncs@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireSyncs-parameter#+--     If @acquireCount@ is not @0@, @pAcquireSyncs@ /must/ be a valid --     pointer to an array of @acquireCount@ valid --     'Vulkan.Core10.Handles.DeviceMemory' handles ----- -   If @acquireCount@ is not @0@, @pAcquireKeys@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireKeys-parameter#+--     If @acquireCount@ is not @0@, @pAcquireKeys@ /must/ be a valid --     pointer to an array of @acquireCount@ @uint64_t@ values ----- -   If @acquireCount@ is not @0@, @pAcquireTimeoutMilliseconds@ /must/+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pAcquireTimeoutMilliseconds-parameter#+--     If @acquireCount@ is not @0@, @pAcquireTimeoutMilliseconds@ /must/ --     be a valid pointer to an array of @acquireCount@ @uint32_t@ values ----- -   If @releaseCount@ is not @0@, @pReleaseSyncs@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pReleaseSyncs-parameter#+--     If @releaseCount@ is not @0@, @pReleaseSyncs@ /must/ be a valid --     pointer to an array of @releaseCount@ valid --     'Vulkan.Core10.Handles.DeviceMemory' handles ----- -   If @releaseCount@ is not @0@, @pReleaseKeys@ /must/ be a valid+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-pReleaseKeys-parameter#+--     If @releaseCount@ is not @0@, @pReleaseKeys@ /must/ be a valid --     pointer to an array of @releaseCount@ @uint64_t@ values ----- -   Both of the elements of @pAcquireSyncs@, and the elements of---     @pReleaseSyncs@ that are valid handles of non-ignored parameters---     /must/ have been created, allocated, or retrieved from the same+-- -   #VUID-VkWin32KeyedMutexAcquireReleaseInfoNV-commonparent# Both of+--     the elements of @pAcquireSyncs@, and the elements of @pReleaseSyncs@+--     that are valid handles of non-ignored parameters /must/ have been+--     created, allocated, or retrieved from the same --     'Vulkan.Core10.Handles.Device' -- -- = See Also
src/Vulkan/Extensions/VK_QCOM_render_pass_transform.hs view
@@ -41,20 +41,23 @@ -- -- == Valid Usage ----- -   @transform@ /must/ be+-- -   #VUID-VkRenderPassTransformBeginInfoQCOM-transform-02871#+--     @transform@ /must/ be --     'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR', --     'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR', --     'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_180_BIT_KHR', --     or --     'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_270_BIT_KHR' ----- -   The @renderpass@ /must/ have been created with+-- -   #VUID-VkRenderPassTransformBeginInfoQCOM-flags-02872# The+--     @renderpass@ /must/ have been created with --     'Vulkan.Core10.Pass.RenderPassCreateInfo'::@flags@ containing --     'Vulkan.Core10.Enums.RenderPassCreateFlagBits.RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM' -- -- == Valid Usage (Implicit) ----- -   @sType@ /must/ be+-- -   #VUID-VkRenderPassTransformBeginInfoQCOM-sType-sType# @sType@ /must/+--     be --     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM' -- -- = See Also@@ -129,6 +132,7 @@     -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value     -- describing the transform to be applied to the render pass.     --+    -- #VUID-VkCommandBufferInheritanceRenderPassTransformInfoQCOM-transform-02864#     -- @transform@ /must/ be     -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',     -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR',
src/Vulkan/Extensions/VK_QCOM_rotated_copy_commands.hs view
@@ -44,7 +44,8 @@     -- 'Vulkan.Extensions.VK_KHR_surface.SurfaceTransformFlagBitsKHR' value     -- describing the transform to be applied.     ---    -- @transform@ /must/ be+    -- #VUID-VkCopyCommandTransformInfoQCOM-transform-04560# @transform@ /must/+    -- be     -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_IDENTITY_BIT_KHR',     -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_90_BIT_KHR',     -- 'Vulkan.Extensions.VK_KHR_surface.SURFACE_TRANSFORM_ROTATE_180_BIT_KHR',
src/Vulkan/Version.hs view
@@ -14,11 +14,11 @@ import Data.Word (Word32)  pattern HEADER_VERSION :: Word32-pattern HEADER_VERSION = 159+pattern HEADER_VERSION = 160   pattern HEADER_VERSION_COMPLETE :: Word32-pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 159+pattern HEADER_VERSION_COMPLETE = MAKE_VERSION 1 2 160   pattern MAKE_VERSION :: Word32 -> Word32 -> Word32 -> Word32
vulkan.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           vulkan-version:        3.6.12+version:        3.6.13 synopsis:       Bindings to the Vulkan graphics API. category:       Graphics homepage:       https://github.com/expipiplus1/vulkan#readme@@ -445,6 +445,7 @@       Vulkan.Extensions.VK_NV_fill_rectangle       Vulkan.Extensions.VK_NV_fragment_coverage_to_color       Vulkan.Extensions.VK_NV_fragment_shader_barycentric+      Vulkan.Extensions.VK_NV_fragment_shading_rate_enums       Vulkan.Extensions.VK_NV_framebuffer_mixed_samples       Vulkan.Extensions.VK_NV_geometry_shader_passthrough       Vulkan.Extensions.VK_NV_glsl_shader